变量未在for循环中初始化

时间:2010-07-16 19:24:30

标签: java

所以当我遇到this问题时,我一直在CodingBat网站上练习我的Java编程技巧。在它中,你必须创建一个简单的方法,它接受一个动态长度的整数数组,检查数组中的元素是否按递增顺序(1,2,3,15678等),并返回“true” “如果为true,或者”false“,如果存在无序的整数。

首先,我初始化一个名为“result”的布尔变量。然后,我遍历该方法传递的整数数组。如果当前索引值小于下一个索引值,我将“result”设置为“true”,并重复循环。否则,我将“结果”设置为“假”,打破循环并将“结果”设置为“假”。在FOR循环之后,我返回“结果”。

但是,我一直收到一条错误消息,指出“结果”尚未正确初始化。我可以理解与JVM的混淆,但是我认为在IF / ELSE语句中设置“result”的值可以解决这个问题。

这是我到目前为止所做代码的副本:

public boolean scoresIncreasing(int[] scores) {
    boolean result;
    for (int i = 0; i < scores.length; i++) {
        if (i < (i + 1)) {
            result = true;
        }
        else {
            result = false;
            break;
        }
    }
    return result;
}

5 个答案:

答案 0 :(得分:2)

首先,我&lt;除非i = Integer.maxValue,否则i + 1将始终为真,在这种情况下,您将回绕到Integer.minValue。

你想要的是分数[i]&lt;得分[i + 1],你需要调整你的循环值,以避免在最后一次迭代时索引越界。

所以,你的代码修好了:

public boolean scoresIncreasing(int[] scores) {
    boolean result;
    for (int i = 0; i < scores.length-1; i++) // fix loop end
    {
        if (scores[i] < scores[(i + 1)]) {
            result = true;
        }
        else {
            result = false;
            break;
        }
    } // missing brace
    return result;
}

尝试此选择。它的工作原则是,一旦你弄错了,你就可以立即离开。

public boolean scoresIncreasing(int[] scores) {
    boolean result = true; // assume true
    for (int i = 0; i < scores.length-1; i++) // fix loop end
    {
        if (scores[i] > scores[(i + 1)]) return false;
    } // missing brace
    return result;
}

当然,您可能希望在开头引入边界检查,以确保至少有两个值。

答案 1 :(得分:1)

你只是在}之前错过了一个右大括号(return result)。

作为简化代码(并处理0个元素的数组!)的建议,您可能希望将result初始化为true。然后,当您遍历数组时,将result更改为false当且仅当您发现某个元素无序时。

另一个警告的话。您在i + 1循环中使用了元素for。想想当你得到数组中的最后一个元素(i == scores.length - 1)时会发生什么。

答案 2 :(得分:1)

if (i < (i + 1))将始终评估为true。您需要比较这些索引处的数组内容,而不是索引本身。

类似的东西:

public boolean scoresIncreasing(int[] scores) {
  for(int i = 0; i < scores.length-1; i++) {
    if(scores[i] > scores[i+1]) return false;
  }
  return true;
}

答案 3 :(得分:0)

如果分数有0个元素怎么办? ]

答案 4 :(得分:0)

在代码中

,你在for循环中返回结果(在if-else语句之后)。

在return语句之前添加另一个括号(关闭for循环)