2017-02-28 73 views
-1

我寫了這段代碼來找到一個數組中的元素,它工作得很好,但我不明白它是如何工作的100%。我的問題是,如何從(j == nElems)只運行從0到9?我也注意到,當沒有找到搜索關鍵字時,條件在for循環之外得到滿足。爲什麼這個條件滿足? (j == nElems)

public class ArrayApp { 
    public static void main(String args[]) { 
     int nElems = 10; 
     int[] arr = new int[nElems]; 
     int j; 
     int searchKey; 
     arr[0] = 77; 
     arr[1] = 99; 
     arr[2] = 44; 
     arr[3] = 55; 
     arr[4] = 22; 
     arr[5] = 88; 
     arr[6] = 11; 
     arr[7] = 00; 
     arr[8] = 66; 
     arr[9] = 33; 
     for (j = 0; j < nElems; j++) { 
      System.out.print(arr[j] + " "); 
     } 
     System.out.println(); 
     //Find 66 in array 
     searchKey = 66; 
     for (j = 0; j < nElems; j++) { 
      if (arr[j] == searchKey) { 
       break; 
      } 
     } 
     if (j == nElems) { 
      System.out.println("Cant find " + searchKey); 
     } else { 
      System.out.println("Found " + searchKey + " in position " + j); 
     } 
     //Remove 55 from array 
     searchKey = 55; // delete item with key 55 
     for (j = 0; j < nElems; j++) { // look for it 
      if (arr[j] == searchKey) { 
       break; 
      } 
     } 
     for (int k = j; k < nElems - 1; k++) { // move higher ones down 
      arr[k] = arr[k + 1]; 
     } 
     nElems--; 
     for (j = 0; j < nElems; j++) { 
      System.out.print(arr[j] + " "); 
     } 
    } 
} 
+0

是否有任何理由你沒有調試應用程序? – liorsolomon

回答

0
for (j = 0; j < nElems; j++) { 
    if (arr[j] == searchKey) { 
     break; 
    } 
} 

nElems是10.所以Ĵ< nElems將滿足,直到j達到10.在這一點上,它會退出循環。但是,只會達到這一點,如果

arr[j] == searchKey 

永遠不會滿足(即沒有找到搜索關鍵字)。所以你所看到的是從來沒有找到搜索關鍵字,j遞增直到10,此時循環退出。此時,j == nElems。

0

在每次迭代結束時,j遞增。之後,測試停止條件。如果該條件成立,則循環退出。否則,它會繼續使用新值j

這意味着您的for循環運行時間長達j < nElems。一旦j == nElemsfor循環完成。因此最後,j必須等於nElems;否則循環將永遠不會終止。

1

讓我們看看你的for循環:

for (j = 0; j < nElems; j++) { 
    if (arr[j] == searchKey) { 
     break; 
    } 
} 

Here的甲骨文的文檔說,大約for循環:

通過 循環每次迭代後的增量表達式被調用;這個表達式遞增或遞減一個值是完全可以接受的。

因此,在上面的循環中,j在每次迭代之後遞增。在第二次迭代中,j將是​​。它將執行循環並增加j,然後使其等於nElems

作爲if條件被放置在循環後,由所述時間控制達到它,j將已經等於nElems,因此,這將是true

1

我們可以嘗試簡化一下這個for循環意味着

for (j = 0; j < nElems; j++) { 
    if (arr[j] == searchKey) { 
     break; 
    } 
} 

for循環本質上分解爲以下幾點:

int j = 0; 
int nElems = 10; 
while(j < nElems) { 
    if(arr[j] == searchKey) { 
     break; 
    } 
    j++; 
} 

你可以看到,最終的條件是當j是相當於10(nElems)。