2017-10-06 97 views
-5

嗨,我在網上看到這個問題,我試圖解決它,但我只是不明白答案是如何確定的。Java數組/循環

int[] n = {0, 1, 0, -1}; 

for (int i = 1; i < n.length; i++) { 
    if (n[i] == 0 && n[i - 1] != 0) { 
     int x = n[i - 1]; 
     n[i - 1] = n[i]; 
     n[i] = x;    
    }   
} 
System.out.println(n[2]); 

答案是1,我不知道如何或爲何是1,不知道是否有人是一種足以解釋爲什麼是答案1.先進的感謝。

+1

你認爲它是什麼? – Neo

+3

如果元素爲零但前面的元素不爲零,則交換元素。因此,交換的唯一元素是'i == 2'。 –

+0

我預計它將是0而不是1 –

回答

2

if內的代碼塊交換n[i]n[i - 1]中的兩個數字。

if本身(條件)檢查n[i]是否爲零並且n[i - 1]爲非零。

循環遍歷從1到數組末尾的所有i值。

讓我們按照循環運行,我們? (行號是i值)

  1. n[1]是1,n[0]是0 - 條件爲假,而不是輸入塊if
  2. n[2]爲0,n[1]爲1-條件爲true,並輸入if塊。現在n[2]是1,n[1]爲0
  3. n[3]爲-1,n[2]是1 - 條件爲假,而不是進入if塊。

數組末尾。

所以n[2]爲1

+0

我會在每次迭代中添加數組值,使其更具視覺效果。 (就像循環中帶有斷點的調試器)。好的解釋 – AxelH

+0

謝謝你正確的解釋,我現在理解它背後的邏輯 –

0

數組從0開始。所以n [2]表示交換後的第三個元素。

交換後:{0,0,1,-1} So n [2] = 1。

0

It's很簡單:

  • 您有4個元素的列表
  • 你去通過列表中,但第二個元素開始爲指標下手0
  • 由於在第一次進入循環時你不會進入if條件,這次你進入if條件。
  • N [1]現在是1和n [I-1]是當前爲0
  • 元素被換,因此n [i]是0,且n [I-1]爲1
  • 因此答案是1
0
if (n[i] == 0 && n[i - 1] != 0) { 
     //Swapping elements i and i - 1 
     int x = n[i - 1]; 
     n[i - 1] = n[i]; 
     n[i] = x; 

當條件爲真時的唯一情況發生當i = 2,因此 N [2] = N [1] = 1;