• ベストアンサー

for文の実行結果について

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になります。 何故こうなるのですか?

noname#68601
noname#68601
  • Java
  • 回答数3
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
noname#77845
noname#77845
回答No.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になると(条件を満たさなくなるので…。)ループを抜けます。 判ります?

noname#68601
質問者

お礼

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

その他の回答 (2)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

そのような結果になるように組んだからです 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ループを抜けます

noname#68601
質問者

お礼

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

noname#94983
noname#94983
回答No.1

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になる。

noname#68601
質問者

お礼

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

関連するQ&A

  • for文の実行結果について

    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になります。 for文をfor (i = 0; i <= 10; i++) { に変えるとiの値は11でnumの値は2048になります。 i < 10はiが10より小さいときtrue、i <= 10はiが10以下のときtrue。 10より小さいと10以下の違いが解りません。 何故、i <= 10になるとiの値は11でnumの値は2048になるのでしょう?

    • ベストアンサー
    • Java
  • for文の実行結果について

    public class Trace3 { public static void main(String[] args) { for (int i = 1; i < 4; i++) { for (int j = 1; j <= i; j++) { System.out.print(" " + (i * j)); } System.out.println(); } } } 実行結果は 1 2 4 3 6 9 になります。 i < 4でiは4より小さいで123は解るのですが、 j <= iでjはiより小さくjを含むで何故469になるのですか?

    • ベストアンサー
    • Java
  • java ネストしたfor文について

    ***** **** *** ** * 上のように*が減るようにしたいのですが下のソースではどこが悪いか教えてください class TestGoo{ public static void main(String args[]){ for(int i = 5; i>=1; i--){ for(int j = 5;j>=1; j--){ System.out.print('*'); } System.out.println(); } } }

  • javaのfor文

    nの値の和を求めるのはこれ以外に書き方はありますか? import java.util.*; class SampleGoo{ public static void main(String args[]){ Scanner std = new Scanner(System.in); System.out.print("整数値:");int n = std.nextInt(); int ans = 0; for (int i = 1;i <= n;i++){ ans = ans + i; } System.out.println(Integer.toString(ans)); } }

  • javaのfor文

    nの値の和を求めるのはこれ以外に書き方はありますか? import java.util.*; class SampleGoo{ public static void main(String args[]){ Scanner std = new Scanner(System.in); System.out.print(\"整数値:\");int n = std.nextInt(); int ans = 0; for (int i = 1;i <= n;i++){ ans = ans + i; } System.out.println(Integer.toString(ans)); } }

  • Java for文

    for文について、キーボードで入力して、その数が素数(1またはその数以外で割り切れない数)であるかを判断するコードですが、for文とif文の関係が良くわかりません。ご教示ください。 <サンプル> public static void main(String[] args) throws IOException{ System.out.println("2以上の整数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); ※1 for(int i=2; i<=num; i++){ if(i == num){ System.out.println(num + "は素数です。"); ※2 }else if(num % i == 0){ System.out.println(num + "は素数ではありません。"); break; ※1と※2の処理について初心者でもわかるような解説をおねがいできますでしょうか? よろしくお願いいたします。

  • for文について

    for文を使って、以下のような図形を作成してますが、 どうしてもうまく作れません。 どなたか教えていただけないでしょうか? 現在出来ているソースは次のようです。 まるで異なる図形になってしまいますが。 public class kurikaeshi { public static void main(String[] args) { int i = 0, j = 0, k = 0, l=0; for(i = 0; i < 10; i++) { for(j = 0; j < i + 1; j++) { for(k = 0; k < 2*j; k++) { System.out.print(" "); } for(l = 0; l < (2*i + 1) - 2*k; l++) { System.out.print("*"); } System.out.println(); } } } } + +++ + +++++ +++ + +++++++ +++++ +++ + +++++++++ +++++++ +++++ +++ + +++++++++++ +++++++++ +++++++ +++++ +++ +

  • for文&if文を使った問題について教えてください。

    参考書の練習問題を解いていて、応用力がないのか理解できない ので、分かる方教えていただけませんか? 問題: キーボードから整数を入力させ、その数が素数であるかどうかを 判断するコードを記述してください。 解答: import java.io.*; class SampleP5 { public static void main(String[] args) throws IOException { System.out.println("2以上の整数を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); int num = Integer.parseInt(str); for(int i=2; i<=num; i++){ if(i = = num){ System.out.println(num + "は素数です。"); } else if(num % i = = 0){ System.out.println(num + "は素数ではありません。"); break; } } } } 例えば"7"を入力すると「7は素数です」と出力されるようなんですが、 『i = 7』だとして、『 if(i = = num)』の条件って当てはまるん ですか?for文でiの初期値が2だから、『2 = = 7』で当てはまらない と思うんですが・・・ 考え方が間違っているんですかね? ※ちなみに(= =)のところ、実際はスペース空いてません。  ここの画面での表示上くっついて1本の線になってしまうので、  スペースを空けて入力したまでです。

    • ベストアンサー
    • Java
  • for文を使った累乗の計算方法について

    質問させてください。 for文を使った累乗の計算プログラムを作っています。 数値はコマンドライン引数から取得し、0番目の数字を i番目の数字分累乗するというものです。 ソースを途中まで作成したのですが、0乗した場合のプログラムが よく分かりません。どなたか教えていただけないでしょうか? public class Mondai { public static void main(String[] args) { //変数の初期化 int k = 0; if ( 2 <= args.length && args.length < 3) { //コマンドライン引数の数だけ配列を用意する int[] num = new int[args.length]; //0,1番目のコマンドライン引数を整数に変換してnumに代入する num[0] = Integer.parseInt(args[0]); k = num[0]; k *= k; num[1] = Integer.parseInt(args[1]); //num[1]の掛け算をnum[1]回繰り返す for (int i = 0; i < num[1] -2; i++) { k *= num[0]; } System.out.println("\"" + num[0] +"の" + num[1] + "乗は"+ k + "\""); if(num[1] == 0) { System.out.println("\"" + num[0] +"の" + num[1] + "乗は1\""); } //args.length <= 1の条件の時 } else if(args.length <= 1) { System.out.println("引数が足りないため累乗の計算ができません。"); //指定された条件以外の時 } else { System.out.println("引数が多すぎるため累乗の計算ができません。"); } } }

    • ベストアンサー
    • Java
  • javaのプログラムについて

    java始めたばかりの者です。 class sample1 { public static void main(String[] args) { for(int i=1; i<=5; i++){ for(int j=0; j<i; j++){ System.out.println("*"); } System.out.println("\n"); } } } これを実行すると * * * * * * * * * * * * * * * こうなってしまい * ** *** **** ***** このようにするにはどうしたらいいのでしょうか??

    • ベストアンサー
    • Java

専門家に質問してみよう