2

私はこのコードの出力を読み込もうとしていますが、それは単に私には意味がありません。

中括弧のないループは最初の行をループするだけであることを知った後でも、出力はまったく意味がありません。ある数字はそうしますが、他の数字はそうではありません。

私のコード:

int n = 8;
int i = 1;
int j = 1;

j = n + 2;

System.out.println (n + " " + i + " " + j );

while (n > 1)
{
    n = n/2;
    for (i = 2; i <= n; i = i+2)
        System.out.println (n + " " + i + " " + j );

    j++;
}
System.out.println (n + " " + i + " " + j );

そしてそれは出力します:

8 1 10
4 2 10
4 4 10
2 2 11
1 2 13

私は8-1-10と4-2-10を手に入れます

しかし、その後は何でも困惑し、コンピューターが残りを計算する方法がわかりません。

誰かが私と一緒に残りの出力を段階的に見ていきませんか?

前もって感謝します。

4

2 に答える 2

9

中括弧がないということは、ループがループに続く次のステートメントにのみ影響することを意味します。

それで

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割り当てるだけであることに注意してください):2i

for (i = 2; i <= 4; i = i+2) //Since n = 4

、取ることができるn = 4唯一の値はとであるため、出力は次のようになります。i24

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ことに注意してください)、それが得られる印刷です。i2

2 2 11

もう一度繰り返す前に、j++makesjに値を付けます12

最後の反復では、nはanであるためn = n/2結果になりますが、これはwhile内で行われるため、再び入ります。ループは次のようになります。n = 1intn = 1

for (i = 2; i <= 1; i = i+2) //Since n = 1

iに設定され2、forの条件が満たされていません(2 <= 1is false)。その後、今回は印刷されませんjが、しばらくするとにインクリメントさ13れます。

次の反復では、があります。これは、の条件が満たされていないため、反復が中断n = 1することを意味します。while最後に、、、がn = 1ありi = 2ますj = 13。それはあなたが得る最後のプリントです。

于 2012-11-07T22:41:24.460 に答える
2

whileループは、n = 8、i = 1、j=10で開始します。

start while: (n=8 > 1) is true
n = 4
i = 2 (i <= 4, so do for loop, then change i to i+2=4)
print 4,2,10
i = 4 (i <= 4, so do for loop again, then i = i+2 = 6
print 4,4,10
i = 6 (i <= 4 is false, so exit for)
j++ so j becomes 11

next while:
n = n/2 = 2
i = 2 (i <= 2, so do for loop, then change i to i+2=4)
print 2,2,11
i = 4 (i <= 2 is false, so exit for)
j++ -> j = 12

next while:
n = n/2 = 1
i = 2 (i <= 1 is false, so exit loop)
j++ -> j = 13

exit while.
Final print= n = 1, i = 2 (value assigned in last for loop, loop doesn't get executed so i doesnt get incremented by 2), and j = 13

お役に立てれば :)

于 2012-11-07T22:51:51.340 に答える