重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

public class Trace2 {
public static void main (String[] args) {
int i;
int num;

num = 1;
for (i = 0; i < 10; i++) {
num += num;
}
System.out.println("iの値は" + i);
System.out.println("numの値は" + num);
}
}

実行結果は
iの値は10
numの値は1024になります。
何故こうなるのですか?

A 回答 (3件)

本当の基本なのですが…。



num += num;
はそのときのnumを2倍しています。
iは0から9まで回りますから、
iが0の時は2倍で2
iが1の時は2倍で4
iが2の時は2倍で8
iが3の時は2倍で16
iが4の時は2倍で32
iが5の時は2倍で64
iが6の時は2倍で128
iが7の時は2倍で256
iが8の時は2倍で512
iが9の時は2倍で1024
になり、iが10になると(条件を満たさなくなるので…。)ループを抜けます。

判ります?
    • good
    • 0
この回答へのお礼

大変良く分りました。
基本中の基本を只今、頭を悩ませながら勉強しています。
トレースというのが独学には難しいです。
どうも有難う御座いました。

お礼日時:2008/09/07 18:36

そのような結果になるように組んだからです



forループを机上で確認してみましょう

i=0 のとき num = 2  .... 1+1
i=1 のとき num = 4  .... 2+2
i=2 のとき num = 8  .... 4+4
i=3 のとき num = 16  .... 8+8
i=4 のとき num = 32  .... 16+16
i=5 のとき num = 64  .... 32+32
i=6 のとき num = 128 .... 64+64
i=7 のとき num = 256 .... 128+128
i=8 のとき num = 512 .... 256+256
i=9 のとき num = 1024 .... 512+512
となり iは10にインクリメントされてから forループを抜けます
    • good
    • 0
この回答へのお礼

謎が解けました。
問題をトレースするのが大変難しいです。
どうも有難う御座いました。

お礼日時:2008/09/07 18:38

i = 0: num = 1: 1 + 1 = 2


i = 1: num = 2: 2 + 2 = 4
i = 2: num = 4: 4 + 4 = 8
i = 3: num = 8: 8 + 8 = 16
i = 4: num = 16: 16 + 16 = 32
i = 5: num = 32: 32 + 32 = 64
i = 6: num = 64: 64 + 64 = 128
i = 7: num = 128: 128 + 128 = 256
i = 8: num = 256: 256 + 256 = 512
i = 9: num = 512: 512 + 512 = 1024

従って、i = 9++ = 10,num = 1024になる。
    • good
    • 0
この回答へのお礼

良く解かりました。
答えが解かると簡単なのに問題を理解するのは難しい。
どうも有難う御座いました。

お礼日時:2008/09/07 18:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!