我在编译这段代码时遇到了Javac的麻烦:
public static int getYear() {
Console input = System.console();
Boolean gotYear = false;
int year;
String userInput = input.readLine();
while (!gotYear) {
try {
year = Integer.parseInt(userInput);
gotYear = true;
} catch (Exception e) {
System.out.print("Please insert a valid date. ");
userInput = input.readLine();
}
}
return year;
}
Javac给我的错误return year;
是“变量'year'可能尚未初始化”。但是由于它在while循环中,所以我肯定知道它已经被初始化了。我问我的助教,他无法回答我为什么会这样。他的最佳猜测是Javac并不是解决这类问题的很好的编译器。
基本上,为什么会发生此错误?我知道我可以通过在进入while循环之前初始化年份来解决此问题,但是我想知道是否还有另一种方法可以实现我要实现的目标。
您的year变量在try块中初始化。对我们来说很明显,只有输入确定后,它才会退出循环。但是编译器的规则比这更简单:由于初始化可能会被异常中断,因此它认为年份可能未初始化。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句