2011-12-29 3 views
1

なぜ次のコードが6回実行されるのですか?私が成功することなくそれを私の頭の中に入れようとしたので、この仕組みが理解できるように助けてください。Java-doループのヘルプの説明が必要

私はそれが最初に、にカウントを増加させる、それに二度目を実行し、後は、その後にカウントを増加させるコードを実行することが三度目に数を増やす実行と思っは、5にカウントを増加させる、それを5回目を実行し、にカウントを増加させる、第時間それを実行し、その後、停止します。つまり、ループが5回回実行されます(最初はカウントが1,2,3,4の場合)。

int count = 0; 

    do { 

     System.out.println("Welcome to Java!"); 

    } while (count++ < 5); 

答えて

2

this codeを実行しましたか?

int count = 0; 

do { 

    System.out.println("Welcome to Java! " + count); 

} while (count++ < 5); 

出力:

Welcome to Java! 0 
Welcome to Java! 1 
Welcome to Java! 2 
Welcome to Java! 3 
Welcome to Java! 4 
Welcome to Java! 5 

これはあなたが何が起こっているかを理解するのに役立つはずです。ポストインクリメント演算子がどのように動作するかは、あなたの混乱の可能性が最も高いと他の人が言っていますか?をまとめる

pre increment 1 
post increment 0 

:ポストインクリメントとの表現は、変数がインクリメントされ前に評価されますが、事前と事後インクリメント演算子を理解するために

another code sample

int a = 0; 
int b = 0; 
System.out.println("pre increment "+ ++a); 
System.out.println("post increment "+ b++); 

出力を実行することができますプリインクリメントでは、式の後にのvariabl eをインクリメントする。

1

全体の発現のその後置演算子第1 evalution次いで

制御はこの

0 
Welcome to Java! 
//condition check : 0 then 1 
Welcome to Java! 
//condition check : 1 then 2 
Welcome to Java! 
//condition check : 2 then 3 
Welcome to Java! 
//condition check : 3 then 4 
Welcome to Java! 
//condition check : 4 then 5 
Welcome to Java! 
//condition check : 5 then 6 
+0

比較が行われた後に 'count ++'が実行されます。 – ZeissS

0
count++; // <-- would execute the above code 6 times 

ように流れることになるがインクリメントポストインクリメントと

++count; // <-- would execute the above code 5 times 

はプレ増分

は考えてみましょう:

while (count++ < 5) System.out.println(count); // prints 1 2 3 4 5 
while (++count < 5) System.out.println(count); // prints 1 2 3 4 

だからあなたdo...whileが(理由はDOの)比較せずに最初に実行され、その後の比較を実行します。

それが再びこのように書くことができ、プリインクリメントなら:

int count = 0; 
do { 
    // print 
    count = count + 1; 
} while (count < 5) 

それはポストインクリメントなら、それは再びこのように書くことができます:

int count = 0; 
while (count < 5) { 
    // print statement 
    count = count + 1; 
} 
1

あなたが使用しているためですポストインクリメント。 whileの状態が最初に評価され(countの値がBEFOREから増分)、次にcountが増分されます。

試行++count(最初に増分してから値を返す)。

編集:

for(int i = 0; i < n; i++) {} 

でそれを使用して(それは通常、などを最適化されます)okですが、

for(int i = 0; i < n; ++i) {} 

がより少し優れていること意味論的観点のIMO。

演算子のオーバーロードによって言語がさらに複雑になります。ここで、++は++ iとは異なる副作用を持つ可能性があります。