我有一个数组
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++)
答案 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=0
和arr[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] = -45
和arr[1] = -2
。与第一个循环相同的推理。
总结:
如果要打印整个排序数组,您唯一关心的是没有超出数组的任何一端并导致IndexOutOfBoundsException
。所以,请从0
开始,直至到达arr.length
。您可能还想查看Arrays.sort()
的{{3}}。