为什么小于9,算9?

时间:2014-10-23 01:01:23

标签: java arrays

我所拥有的java书有各种各样的问题,我正在做的其中一本已经在书的后面列出了正确的答案,正如我在下面写的那样。我理解一切是如何运作的。就像为什么你不想使用> =,当它出现问题时如何输出,等等。我只是不明白为什么for行需要它< 9而不是< = 9或< 10。我知道最后一个数字不必循环,因为它之前的数字被比较,但是如果它小于9则不会在第9个元素之前停止,这使得第10个元素不会被比较吗? / p>

错误代码:

double[] scores = {2.5, 3.9, 4.8, 6.2, 6.2, 7.4, 7.9, 8.5, 8.5, 9.9};
    for (int i = 1; i <= 10; i++)
      if (scores[i] >= scores[i+1])
        System.out.println(i + " and "  + (i + 1)
        + " elements of score are out of order.");

正确代码:

double[] scores = {2.5, 3.9, 4.8, 6.2, 6.2, 7.4, 7.9, 8.5, 8.5, 9.9};
    for (int i = 1; i < 9; i++)
        if (scores[i] > scores[i+1])
          System.out.println(i + " and "  + (i + 1)
          + " elements of score are out of order.");

编辑:问题是: 以下是为了确保得分的元素处于非递减顺序。但是,代码中存在错误。查找并更正错误。

3 个答案:

答案 0 :(得分:4)

请记住,索引从0开始。列表中有10个元素。这意味着索引范围为0-9

您正在访问ii+1元素。因此,当fori8循环中,您正在查看索引为89的项目。如果您让循环上升到9,那么您将尝试访问索引为910的元素,并获得IndexOutOfBoundsException

答案 1 :(得分:0)

您需要将i从0计算到scores.length-2(因为length-1是最后一个元素,并且您希望确保将倒数第二个与最后一个进行比较)。

或者,您可以从1..scores.length-1开始计算,并将索引i-1i进行比较:

double[] scores = {2.5, 3.9, 4.8, 6.2, 6.2, 7.4, 7.9, 8.5, 8.5, 9.9};
for (int i = 0; i <= scores.length - 2; i++)
    if (scores[i] >= scores[i+1])
        throw new RuntimeException(i + " and "  + (i + 1) + " not strictly monotonic");

double[] scores = {2.5, 3.9, 4.8, 6.2, 6.2, 7.4, 7.9, 8.5, 8.5, 9.9};
for (int i = 1; i <= scores.length - 1; i++)
    if (scores[i-1] >= scores[i])
        throw new RuntimeException((i-1) + " and "  + i  + " not strictly monotonic");

答案 2 :(得分:-2)

我不明白你想做什么。您应该从第0个索引开始循环到&lt; = 9或&lt; 10。永远记住数组索引从0开始