重复的循环练习,初学者需要建议学习

时间:2015-12-17 22:00:33

标签: java arrays sorting

了解-1循环中的for,是否需要包含forif行代码的详细说明?

int[] array = { 2, 5, 1, 2, 3, 5 };

Arrays.sort(array); 

// why does this start counting from 1, and if l put 0 it goes to error, out of bounds?
for (int i = 1; i < array.length; i++) { 

    if (array[i] == array[i - 1]) {        // - 1?
        System.out.print(array[i]);
    }
}

2 个答案:

答案 0 :(得分:2)

它没有任何内在错误。

它只是使迭代从i=1开始直到数组的长度,但由于数组中的索引是从零开始的,所以在获取值时必须抵消它。

这就是array[i-1]

的原因

如果您放置i=0,那么您还必须将结束条件更改为array.length-1,并且您必须按array[i]访问这些值,以避免超出范围。< / p>

答案 1 :(得分:0)

对于这样的问题,请一次一行地使用代码并尝试按照它正在进行的操作。

这里你要做的第一件事是创建一个数组,然后对它进行排序。 Arrays.sort(array)电话结束后,您的array将包含以下内容:

index      0 1 2 3 4 5
----------------------
contents   1 2 2 3 5 5

请记住,数组是零索引的 - 这意味着第一个元素位于索引0处。(数组的内容无关紧要,它是索引你想要注意。)

数组不能索引小于零,并且它们也不能具有大于其长度-1的索引。因此,对于您的示例,这意味着您不能将-1用作索引,因为它小于0.您也不能使用6作为索引,因为6大于数组的长度(6)减去1。

在for循环的初始化中,为第一次迭代设置i等于1。虽然非常规,但它完全合法。这只是表示我们将从数组中开始的 index 。因此,对于循环的第一次迭代,array[i]将指向值2,array[i-1]指向值1.

index      0 1 2 3 4 5
----------------------
contents   1 2 2 3 5 5
i            ^
i-1        ^

现在,如果您将i设置为从索引0开始,该怎么办?那么,array[i]将指向第0个索引(值1)...但是array[i-1]指向什么?

index      0 1 2 3 4 5
----------------------
contents   1 2 2 3 5 5
i          ^ 
i-1      ^

它指向索引-1。由于数组的索引不能为-1,因此会导致IndexOutOfBoundsException。希望这是有道理的。