2013-01-04 171 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()