2016-08-20 111 views
-2

我在運行下面的循環一個非常混亂的時間:我的for循環發生了什麼?

int indexPos; 
    for(indexPos = 0; indexPos < size; indexPos++) { 
     System.out.println(indexPos + "!"); 
     if(sourceModuleValue < controlPoints.get(indexPos).inputValue) { 
      break; 
     } 
    } 
    System.out.println(indexPos + "?"); 

我在println增補所以我可以看到,爲什麼我得到的錯誤。其他一些要注意的事項:在我的程序中,size = 7controlPointsArrayList,但我不認爲這是什麼原因導致我的問題。這裏的讀出:

0! 
1! 
2! 
3! 
3? 
0! 
1! 
2! 
2? 
0! 
1! 
2! 
3! 
4! 
5! 
6! 
6? 
0! 
1! 
1? 
0! 
1! 
1? 
0! 
1! 
2! 
3! 
4! 
5! 
6! 
6? 
0! 
1! 
2! 
3! 
4! 
4? 
0! 
1! 
1? 
0! 
1! 
1? 
0! 
1! 
2! 
2? 
0! 
1! 
2! 
3! 
4! 
5! 
6! 
7? 

據我所知,這個循環應該比6從未輸出的indexPos值更大,因爲我認爲這是for迴路是如何工作的。 controlPoints可以get循環內的值,但在break之後,數字再次遞增。我認爲這個數字直到循環結束纔會增加?這是錯的嗎?我應該合併預增量而不是後增量嗎?

+0

你能張貼'size','sourceModuleValue'和'controlPoints'值? –

+0

請顯示一個完整的,最小的例子。 – OldProgrammer

+0

每當遇到像這樣的情況時,最好在循環的開始處插入一個斷點並進行幾次迭代。做到這一點,並試圖找出它:) – Tdorno

回答

4

for循環進入到結束,的indexPos值爲上限

for(indexPos = 0; indexPos < size; indexPos++) 

上次for執行,indexPos增加。因爲它不符合條件,循環不執行

這就解釋了,如果沒有break被稱爲for環內的indexPos值的值不可能的for循環中,在這裏等於size ,即7

(這是相同的行爲C,因爲這個結構是從C語言繼承)

+0

是的,就是這樣,我剛纔發現有一次它不起作用的時候,if語句從未返回true。堆棧溢出讓我接受你的答案 –