具有多个条件的for循环

时间:2013-01-04 19:29:43

标签: java for-loop

我有一个数组

int[] arr = {9,20,-2,-45,23,5,1};

我正在使用

对其进行排序
java.util.Arrays.sort(arr);

for循环:

for(int i =0;(i<arr.length) && (arr[i] > 0) ; i++)
由于条件(arr[i] > 0)

似乎不起作用。我没想到为什么这不起作用的原因。令人惊讶的是,以下循环以预期的方式工作:

for(int i =0;(i<arr.length) && (arr[i] != 0) ; i++)

for(int i =0;(i<arr.length) && (arr[i] < 0) ; i++)

5 个答案:

答案 0 :(得分:6)

java.util.Arrays.sort(int[] arg);按升序排序,因此排序后的第一个值(arr[0])将为-45。自for(int i =0;(i<arr.length) && (arr[i] > 0) ; i++)以来的第一次迭代,arr[0] == -45将为false,因此(arr[0] > 0)为false。)

答案 1 :(得分:2)

对数组进行排序后,-45成为第一个元素,因此> 0检查会立即评估为false

另一方面,< 0评估前两个元素的true!= 0评估整个数组的true

答案 2 :(得分:1)

从本质上讲,在对数组进行排序后,你的循环永远不会运行。

条件arr[i] > 0无效,因为您遇到的第一个元素将小于0.

只要数组中没有0,条件arr[i] != 0就会运行。

条件arr[i] < 0仅针对前两个元素运行。

答案 3 :(得分:1)

第一个循环在第一个项目之前停止,因为arr[0]为负数。

如果你想在循环中只获得正元素,那么正确的语法是:

    for (int i = 0; (i < arr.length) ; i++) {
        if (arr[i]> 0) {
            // Do stuff
        }
    }

答案 4 :(得分:1)

默认情况下,

Arrays.sort()将根据其natural order对给定数组进行排序。对于int而言,这意味着提升。鉴于此,以下是3个循环的演绎方式:

for (int i =0; (i<arr.length) && (arr[i] > 0); i++)

初始化循环时i=0arr[0] = -45。这不会通过您的支票(arr[i] > 0)中的第二个条件,并且循环被“跳过”。

for (int i =0; (i<arr.length) && (arr[i] != 0); i++)

由于数组0中没有值(arr[i] != 0)的元素,因此总是评估为true。顺便说一下,循环只是插入数组的长度。

for (int i =0; (i<arr.length) && (arr[i] < 0); i++)

此循环应仅打印数组的前2个元素arr[0] = -45arr[1] = -2。与第一个循环相同的推理。

总结:

如果要打印整个排序数组,您唯一关心的是没有超出数组的任何一端并导致IndexOutOfBoundsException。所以,请从0开始,直至到达arr.length。您可能还想查看Arrays.sort()的{​​{3}}。