我所拥有的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.");
编辑:问题是: 以下是为了确保得分的元素处于非递减顺序。但是,代码中存在错误。查找并更正错误。
答案 0 :(得分:4)
请记住,索引从0
开始。列表中有10个元素。这意味着索引范围为0-9
。
您正在访问i
和i+1
元素。因此,当for
为i
时8
循环中,您正在查看索引为8
和9
的项目。如果您让循环上升到9
,那么您将尝试访问索引为9
和10
的元素,并获得IndexOutOfBoundsException
。
答案 1 :(得分:0)
您需要将i
从0计算到scores.length-2
(因为length-1
是最后一个元素,并且您希望确保将倒数第二个与最后一个进行比较)。
或者,您可以从1..scores.length-1开始计算,并将索引i-1
与i
进行比较:
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开始