2013-01-04 107 views
0

我有一个数组循环与多个条件

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)。我没有想到这不应该起作用的原因。让人吃惊的是,follwing环路预期的方式工作:

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

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

那些循环应该起作用的预期方式是什么? –

+0

如果你想输出你的排序数组的内容删除第二个标准,并只做:for(int i = 0; i

+3

'i'为0,'arr [i]'在排序后是-45,所以你的条件是'假',循环将不会执行。你的问题是什么?? – jlordo

回答

6

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

+1

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Arrays.html#sort%28int[]%29为什么 –

+1

这将是-45 –

+1

我认为排序后第一个元素将为-45。但你的逻辑仍然是正确的(+1)。 – Alexandar

2

一旦你排序的阵列,-45成为第一要素,所以> 0立即检查结果为false

在另一方面< 0评估为true对于前两个元素,并且!= 0评估为true整个阵列。

1

从本质上说,后您排列阵列,你的循环将永远不会运行。

条件arr[i] > 0是无效的,因为你会遇到的第一个元素是小于0

条件arr[i] != 0将运行,只要您在数组中没有一个0。

arr[i] < 0将运行仅前两个因素的条件。

1

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

如果你想在循环中获得唯一的积极因素,正确的语法是:

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

Thanks @obourgain。这是我应该做的。 – Satbir

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++) 

该循环应该仅打印阵列,arr[0] = -45arr[1] = -2的前2层的元件。与第一个循环相同的推理。

综上所述:

如果你想打印整个数组排序,你所关心的唯一事情是没有跑过对阵列的结束,引起IndexOutOfBoundsException。所以,从0开始,直到你到达arr.length。您可能还想查看the documentationArrays.sort()