【发布时间】:2017-07-20 15:18:50
【问题描述】:
private int getJobIndex() {
int jobNum;
boolean inputValid = false;
while (!inputValid) {
jobNum = getIntegerInput("Please select a job to work on: ");
if (jobNum < 0 || jobNum >= game.getNumberOfJobs()) {
System.out.println("Invalid selection. Please choose a valid job.");
}
else {
inputValid = true;
}
}
return jobNum;
}
这是一个有点理论的问题,所以请多多包涵。在上面的代码中,我正在获取用户输入,在循环中对其进行验证,然后将其返回。上面编写的代码在 Eclipse 中无法编译,因为“局部变量 jobNum 可能尚未初始化”。 Eclipse 的建议是将初始声明更改为int jobNum = 0;。不过,这让我很困扰,因为如果 jobNum 在没有初始化的情况下通过了 while 循环,那将很糟糕,并且将其设置为 0 可能会使该错误很难找到(尤其是在这里,因为 0 是有效的工作索引)。如果它未初始化,我想事情会很快崩溃,我会找到错误。现在,我可以将它初始化为 -1,但很容易想象一个所有整数都有效的类似场景。对这个例子来说并不重要,但为了将来编写更好的代码......
总之,我有两个问题:
- 为什么 Eclipse 会强迫我这样做?这似乎是一个相当严厉的编译器错误。
- 什么是正确的编码方式,不会引入我可能很容易误认为输入的默认值?
【问题讨论】:
-
您希望编译器“知道”您将进入 while 循环。它没有 - 或者更确切地说,编译器完全遵守语言规范。如果你把它改成
do/while循环应该没问题... -
请参阅 stackoverflow.com/questions/11165485/… 了解为什么必须初始化它。
-
完美,非常感谢。