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 (!inputValid) {
不满足 Java 的可达性测试或其他测试。
因此在这种情况下 Java 需要一个错误。
关于java - Eclipse 要求我初始化局部变量似乎是一个错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42529318/