2017-11-06 3 views
-4
public class Exon303 { 
    public static void main(String[] args) { 
     int k = 109; 

     do { 
      for(int i = 3; i < 9; i = i * 2) { 
       if(k % i ==3) { 
        k = k/3; 
       } else { 
        k = k/2; 
       } 
      } 
      System.out.println(k); 
     } while(k > 0); 
     for(int i = 0; i < 2; i++) { 
      for(int j = 0; j < 2; j++) { 
       for(int m = 0; m < i * 2; m++) { 
        if(m == j && m == i) { 
         System.out.println("i: " + i); 
         System.out.println("j: " + j); 
         System.out.println("m: " + m); 
        } 
       } 
      } 
     }  
    } 
} 

私が作成したこれらのループの出力を私に説明することができますか?私はそれを2回トレースしました。何らかの理由で、トレースしたときに出力が変化します。ここでネストされたループの混乱

Expected output: 
27 
6 
1 
0 
i: 1 
j: 1 
m: 1 

Handtraced output: 
54 
27 
9 
4 
2 
0 
i: 0 
j: 0 
m: 0 
i: 1 
j: 1 
m: 1 
+0

2つの出力を提供できますか? – Lino

+0

私に1秒を与えてください。 – char1996

+0

期待される出力と実際の出力は何ですか? – procrastinator

答えて

0

以下の私のhandtraced出力はあなたが手で、あなたのコードをトレースで間違っていたです。私に説明させてください。

コードを2つに分けてください。第1部:

int k = 109; 

    do { 
     for(int i = 3; i < 9; i = i * 2) { 
      if(k % i ==3) { 
       k = k/3; 
      } else { 
       k = k/2; 
      } 
     } 
     System.out.println(k); 
    } while(k > 0); 

あなたは1 whileループ、k = (k/2)/2 = 27後、(I = 3,6)forループ各回k/2次いで、forループのk外側を印刷しました。 kにはk % i == 3という値がない場合、次のwhileループと同じです。したがって、各whileループのkの次の値は27/4 = 66/4 = 1です。

---- while loop ---- 
k = 109, i = 3 
k = 54, i = 6 => print k/2 = 27 
---- while loop ---- 
k = 27, i = 3 
k = 13, i = 6 => print k/2 = 6 
---- while loop ---- 
k = 6, i = 3 
k = 3, i = 6 => print k/2 = 1 
---- while loop ---- 
k = 1, i = 3 
k = 0, i = 6 => print k/2 = 0 
----> k == 0, break while loop 

2部:

for(int i = 0; i < 2; i++) { 
     for(int j = 0; j < 2; j++) { 
      for(int m = 0; m < i * 2; m++) { 
       if(m == j && m == i) { 
        System.out.println("i: " + i); 
        System.out.println("j: " + j); 
        System.out.println("m: " + m); 
       } 
      } 
     } 
    }  

Iを印刷する条件、J、M値m == j == ii, jあるだけ2つの値0, 1を有するが、これはループのそれぞれの先頭にk, i値であります条件m < i*2forのループmは、i = 0m = 0の場合は無視されます。だから唯一の出力:i = j = m = 1

+0

本当にありがとう – char1996

関連する問題