2016-08-20 3 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? 

私の知る限りでは、私はそれがforループが働いていた方法ですと思っているので、このループは、6より決して出力indexPosの値も大きくする必要があります。 controlPointsgetループ内の値ですが、breakの後には、数値が再び増加します。私はループの終わりまで数が増えないと思った?これは間違っていますか?ポストインクリメントの代わりにプリインクリメントを組み込むべきですか?

+0

あなたは 'size'、' sourceModuleValue 'と' controlPoints'値を投稿してもらえますか? –

+0

完全な最小限の例を示してください。 – OldProgrammer

+0

これらのような状況に遭遇したときは、ループの開始時にブレークポイントをちょうど突き当たり、数回繰り返します。それを把握してみてください:) – Tdorno

答えて

4

forループが終わりになると、indexPosの値はfor実行、indexPosが増加した前回

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

上限です。それはの条件を満たしていないので、ループが何breakforループ内で呼び出されていない場合、indexPosの値はforループ内で可能ではない値であり、ここでsizeに等しいことを説明し

を実行されません、すなわち7

(この構築物は、C言語から継承されているので、これは、Cの場合と同じ動作です)

+0

ええ、それだけです、私はちょうどそれがうまくいかなかったのは、if文が真実を返さなかったときであると考えました。私はスタックオーバーフローが私に –

関連する問題