【问题标题】:Eclipse requiring me to initialize local variable seems like a mistake [duplicate]Eclipse 要求我初始化局部变量似乎是一个错误 [重复]
【发布时间】: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,但很容易想象一个所有整数都有效的类似场景。对这个例子来说并不重要,但为了将来编写更好的代码......

总之,我有两个问题:

  1. 为什么 Eclipse 会强迫我这样做?这似乎是一个相当严厉的编译器错误。
  2. 什么是正确的编码方式,不会引入我可能很容易误认为输入的默认值?

【问题讨论】:

  • 您希望编译器“知道”您将进入 while 循环。它没有 - 或者更确切地说,编译器完全遵守语言规范。如果你把它改成do/while 循环应该没问题...
  • 请参阅 stackoverflow.com/questions/11165485/… 了解为什么必须初始化它。
  • 完美,非常感谢。

标签: java eclipse


【解决方案1】:

while (!inputValid) { 不满足 Java 的可达性测试或其他测试。

所以在这种情况下Java需要一个错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多