中括弧がないということは、ループがループに続く次のステートメントにのみ影響することを意味します。
それで
for (i = 2; i <= n; i = i+2)
System.out.println (n + " " + i + " " + j );
と同等です
for (i = 2; i <= n; i = i+2)
{
System.out.println (n + " " + i + " " + j );
}
通常、インデントは、次のようにコードをより理解しやすくするために使用されます。
for (i = 2; i <= n; i = i+2)
System.out.println (n + " " + i + " " + j );
編集:さて、これは質問に対する実際の答えです。それはすべて、ループが行うさまざまな反復と、変数がどのようにインクリメントされるかに依存します。
int n = 8;
int i = 1;
int j = 1;
j = n + 2; //This means that j takes the value 10.
System.out.println (n + " " + i + " " + j ); // 8 1 10 So far, so good.
さて、反復を続けます:
while (n > 1)
{
n = n/2;
for (i = 2; i <= n; i = i+2)
System.out.println (n + " " + i + " " + j );
j++;
}
最初の反復では、があります。ループが発生するn=8 i=1 j=10
ためn > 0
です。true
n = n / 2; //n = 4
次に、 (値をにfor
割り当てるだけであることに注意してください):2
i
for (i = 2; i <= 4; i = i+2) //Since n = 4
、取ることができるn = 4
唯一の値はとであるため、出力は次のようになります。i
2
4
4 2 10
4 4 10
その後、j
が1ずつ増えて、になりますj = 11
。のための条件がwhile
再び満たされn = 4
ます。n = n/2
値をn
取る2
ようにするので、に入力しwhile again
ます。をもう一度見てみましょう:
for (i = 2; i <= 2; i = i+2) //Since n = 2
今回は、i
取ることができる唯一の値は(反復の開始中にの値が再びリセットされる2
ことに注意してください)、それが得られる印刷です。i
2
2 2 11
もう一度繰り返す前に、j++
makesj
に値を付けます12
。
最後の反復では、nはanであるためn = n/2
結果になりますが、これはwhile内で行われるため、再び入ります。ループは次のようになります。n = 1
int
n = 1
for (i = 2; i <= 1; i = i+2) //Since n = 1
i
に設定され2
、forの条件が満たされていません(2 <= 1
is false
)。その後、今回は印刷されませんj
が、しばらくするとにインクリメントさ13
れます。
次の反復では、があります。これは、の条件が満たされていないため、反復が中断n = 1
することを意味します。while
最後に、、、がn = 1
ありi = 2
ますj = 13
。それはあなたが得る最後のプリントです。