2016-09-23 5 views
1
public class YourClassNameHere { 
     public static void main(String[] args) { 
      int i = 1; 
      do 
      while(i++ <= 2); 
      while(i++ <= 4); 
      System.out.println(i); 

     } 
    } 

このプログラムではループとポストインクリメントがどのように機能していますか。このスニペットはどのように出力を7としますか?

+4

は、鉛筆と紙を取得して、手で動作します。 –

+1

デバッガを使用すると、 – Jens

+2

が表示されます。最初のヒント:それぞれのループを展開してカッコで囲んだボディを作成してから、ボディにログを追加することができます。 –

答えて

4

これを見て、whileループをネストしました。

int i = 1; 
     do { 
     System.out.println("start"+i); 
     while(i++ <= 2)System.out.println("inner while loop "+i); 
     } 
     while(i++ <= 4)System.out.println("outer while loop"+i); 
     System.out.println("final ans"+i); 
+0

ループ状態が偽になるので、私は4に増分すると、i = 5が出力されるはずですが、6と7に増分されます。 –

+0

<= 4のため変数値= 4 (i ++ <= 2)条件がfalseになり、i ++コールの分がi = 6になってからwhileループ条件がfalseになり、呼び出し回数が増えるとi = 7になります。 。それが7を出す理由です。 – halim

2

と言ったように、あなたはネストされたループを持っています。いくつかのSystem.out.printlnをコードに入れて、結果を見てください。

例:

int i = 1;  
do 
{ 
    System.out.println("i = " + i + " on position: outer loop start"); 
    while (i++ <= 2) 
    { 
     System.out.println("i = " + i + " on position: inner while loop");   
    } 
    System.out.println("i = " + i + " on position: outer while loop"); 
    } while (i++ <= 4); 

    System.out.println("i = " + i + " on position: final result"); 

あなたは「i」は、変数は1から7までの増分であり、それが起こっているwhitch位置にどのように表示される結果を参照してください後。条件i ++ < = 2で入力 "i"が2の場合、最初のものは2 < = 2(真)であり、その後に "i"は3の増分値を取得することを知る必要があります。 3 < = 4(偽)ですが、あなたがi ++を持っているので、インクリメントの値は4になります。 上記のコードを実行し、インクリメントが実際に起こっている場所を確認してください。

1

単純に言えば、十分な角括弧を使用していません。すべての'do '、'if'などで角括弧を使用することをお勧めします。そうしないと、予期しない結果が発生することがあります(ここのような?)。あなたが見たいと思っている特定の出力はありますか、この場合、なぜ7を得るのですか?かかわらず、その答えの、ハリムのソリューションは、私が話しているものです

do { 
while (i++ <= 2); 
} 
// remaining code in here 
関連する問題