• ベストアンサー

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になるのですか?

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

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

  • ベストアンサー
noname#144013
noname#144013
回答No.3

miya_des さん、はじめまして。 私自身、C言語の経験はありますが、Javaの経験は殆ど無く、あまり偉そうなことは言えませんが、 今回のご質問に関しては、C言語とほぼ同じような部分なので、失礼ながらコメントさせて頂きます。 たぶんですが、miya_des さんは下記の実行文、   System.out.print(" " + (i * j)); の意味を、   変数 i と 変数 j の内容(値)を表示させる実行文 だと勘違いされているのではないでしょうか? この実行文は、そうではなく、   変数 i と 変数 j を掛算( i × j )した結果の値 を表示させる実行文です。 ご存知だとは思いますが、(i * j) の部分の '*' (アスタリスク)は四則演算での「掛算(×)」を 意味する演算子になります。 <Javaでの四則演算の演算子>...(※これはC/C++言語でも同様となります。)   +  加算(+)  a = b + c;   -  減算(-)  a = b - c;   *  乗算(×)  a = b * c;   /  除算(÷)  a = b / c;   %  剰余     a = b % c; ですので、今回のプログラムでは (※以下はtgook さんの示されたものを引用させて頂きました。m(__)m)  【i のループ】 【j のループ】  【(i * j)の値】   【表示出力】       【備 考】     1        1      1×1 = 1   1行目: 1       j のループ終了→改行実行     2        1      2×1 = 2   2行目: 2       j のループ継続→改行なし     2        2      2×2 = 4   2行目: 2 4     j のループ終了→改行実行     3        1      3×1 = 3   3行目: 3       j のループ継続→改行なし     3        2      3×2 = 6   3行目: 3 6     j のループ継続→改行なし     3        3      3×3 = 9   3行目: 3 6 9   j のループ終了→改行実行     4 → i のループ終了 と処理され結果として、   1   2 4   3 6 9 という表示結果になると思います。 ※Java言語の基本的な記号、文法、構文規則などについては、Java言語関連の書籍などを よくお読み頂くことをお勧め致します。 あと、WEB上のJava言語関連の入門サイトなどをご覧になるのも良いかと思います。

noname#68601
質問者

お礼

長文の回答有難う御座います。 独学でJava講座入門の教科書の問題を見て勉強してます。 問題を見て紙に書いてのトレースが出来ません。 *が掛け算というのはわかってましたが、 どういうふうに掛け算をするのかわかりません。 問題の意味を理解してトレースがとにかくできるようにしたいです。

その他の回答 (3)

  • tgook
  • ベストアンサー率48% (96/198)
回答No.4

FarEyesさん 投稿した回答の不足分をサポートして頂いただけでなく、 より詳細なご回答、ありがとうございます。 私もFarEyesさんの提示された処理で正しいと思います。 また、今回のmiya_desさんの質問内容とは異なってしまいますが、 Javaの演算子に関しまして追加コメントを入れさせていただきます。 加算演算子(+)に関しての追加コメントですが、 こちらは文字列を連結させる、連結演算子という用い方もできます。 以下は、"回答 => " という文字列と、iの値を連結させ、 プロンプトに出力する例です。 例 : System.out.println("回答 => " + (i)); 実行しますと以下のようになります。 出力結果  iの値が 7の時 : 回答 => 7  iの値が43の時 : 回答 => 43 詳しくは以下をご参照ください。 => http://www.javaroad.jp/java_operator1.htm

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

変数を表示しながら結果を表示してみましょう for (int i = 1; i < 4; i++) {   System.out.print( "i=" + i );   for (int j = 1; j <= i; j++) {     System.out.print(" j=" + j);     System.out.print(" (" + i + "*" + j + ")=" + (i * j));   }   System.out.println(); } とした結果と 以前の結果を比較してみてください 4,6,9は 2x2、3x2、3x3 による結果です

noname#68601
質問者

補足

j <= iでjはiより小さく i を含むでした。 i を含むで何故4.6.9は2x2、3x2、3x3 になるのか、 まだまだ変数が読めないので難しいです。

  • tgook
  • ベストアンサー率48% (96/198)
回答No.1

最後の 469 というのは 369の間違いですか? ちなみに miya_des さんのコードを デバッグしますと以下のようになります。 i j output  備考 1 1 1    1回目終了   => " 1" 2 1 2    改行されない 2 2 4    2回目終了   => " 2 4" 3 1 3    改行されない 3 2 6    改行されない 3 3 9    3回目終了   => " 3 6 9" j の繰返し処理部分は j <= i により j が i より大きくならないということは正しいと思います。 ( j の値 は i の値以下 であるといった感じです。 ) また、上記の結果から実行結果も問題ないと思います。 アルゴリズムを考えたり、コーディング作業が終了したら、 自分の考え通り処理が動くか、 紙に書いてみたり、Excelなどを使って計算してみたりすると デバッグのいい勉強になると思います。

noname#68601
質問者

補足

何回やっても 1 2 4 3 6 9 になるのですが? 間違ってはないはずです。

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

    • ベストアンサー
    • 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(); } } }

  • 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文について

    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(); } } } } + +++ + +++++ +++ + +++++++ +++++ +++ + +++++++++ +++++++ +++++ +++ + +++++++++++ +++++++++ +++++++ +++++ +++ +

  • 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
  • 配列を使った・・・。

    配列を使って簡単な迷路を作っているのですが、なかなかうまくいきません。 0を" "1を"■"を表示させたいのですがうまくいきません。 何処を直せばいいのか教えてください。 public class Sample1 { public static void main (String[]args) { int [][] data = { {1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1}, {1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,1,0,1,1,1}, {1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1}, {1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1}, {1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1}, {1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1}, {1,1,1,1,0,0,1,1,0,1,0,1,1,1,0,1,1,1,1,1}, {1,1,1,1,0,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1}, {1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1}, {1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} }; for (int i=0; i<10; i++) { for (int j=0; j<20; j++) { System.out.print(data [i][j]); } if(data [i][j] = 1){ System.out.println("■"); }else{ System.out.println(" "); } } } }

    • ベストアンサー
    • Java
  • 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)); } }

  • 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("a"); } for(l = 0; l < (2*i + 1) - 2*k; l++) { System.out.print("*"); } System.out.println(); } } } } + +++ aa+ +++++ aa+++ aaaa+ +++++++ aa+++++ aaaa+++ aaaaaa+ +++++++++ aa+++++++ aaaa+++++ aaaaaa+++ aaaaaaaa+ +++++++++++ aa+++++++++ aaaa+++++++ aaaaaa+++++ aaaaaaaa+++ aaaaaaaaaa+

    • ベストアンサー
    • Java
  • forループの中での初期化

    class Foo{   public static void main(String args[]){     int x=10;     for(int i=0;i<5;i++){       System.out.print(x+i);     }     System.out.print("\n"+i);   } } このプログラムはコンパイルエラーが出ます。 iがforループの中で宣言されていてその外では無効だからです。 そこで class Foo{   public static void main(String args[]){     int x=10;     int i;     for(i=0;i<5;i++){       System.out.print(x+i);     }     System.out.print("\n i="+i);   } } のようにしてみました。 i=5と出ました。 ふと、iは確かに宣言されているけど、初期化はforの中でしかされていないのになぜコンパイルエラーにならなかったんだろう??、と思ってしまいました。 おかしくないでしょうか?

    • ベストアンサー
    • Java

専門家に質問してみよう