2014-10-11 89 views
1

我不明白這段代碼。我的一位朋友認爲我使用布爾值來使其工作。我不明白他何時解釋它。爲什麼循環中的foundFOR循環中的布爾值

int id = input.nextInt(); 
boolean found = false; 
for (int i = 0; i < z && !found; i++){ 
    if (arr[i].getId() == id){ 
     found = true; 
     index = i; 
    } 
} 

回答

0

for循環的i<z && !found部分是條件,爲了循環繼續,條件必須爲真。添加!found部件意味着當found爲true或i>=z(無論哪個先發生)時,循環都會終止。沒有這種條件,即使在第一次迭代中找到匹配(即arr[i].getId()==id),循環總是會運行z次。因此,這種情況是一種優化,可以縮短循環的運行時間。

!found條件的替代方案是用break關鍵字來終止循環:

  for(int i=0; i<z; i++){ 
       if(arr[i].getId()==id){ 
        found = true; 
        index = i; 
        break; 
       } 
      } 
+0

謝謝你這麼多埃蘭爵士!起初它真的讓人困惑。不知道for循環中找到的目的是什麼。你現在更清楚了。哈哈* weeeee *! – topacoBoy 2014-10-11 10:11:57

1

這裏的「布爾」是用盡可能快的陣列中發現的輸入的「ID」終止循環。好的是編譯器不必搜索,直到找到最後一個索引爲止的「id」。

0

裏面的for循環的條件語句讀取

i < z && !found 

當「發現」是真實的,for循環將停止循環。你可以閱讀更多有關循環here

For循環語法如下:

for (initialize ; condition ; increment) {} 

也有可能取代你與while循環迴路。

int i = 0; 
int found = false; 
while(i < z && !found) { 
    if(arr[i].getId()==id){ 
     found = true; 
     index = i; 
    } 
} 

在這兩種情況下,都可以使用「break」關鍵字來簡化條件。 break關鍵字導致循環立即退出。這可能是也可能不是這裏的適當解決方案,但它確實顯示了處理這些類型的循環的另一種方式。

for(int i=0; i<z; i++){ 
    if(arr[i].getId()==id){ 
     index = i; 
     break; 
    } 
}