• ベストアンサー

自分で組んでわからないです・・・

自分で考えても全くわからず質問しました。 わからないソースは以下のとおりです 出力結果は001012になります。 public class A{ public static void main(String[]args){ for(int i=0; i<4; i++){ for(int j=0; j<i; j++){ System.out.print(j); } } } } 何がわからないことはなんで出力結果が001012になるかです。 jの初期値を0してiの初期値も0にしているのになんで内側ループも回るかがわからないです。 何故ですか?

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

  • ベストアンサー
回答No.4

今のコードの前提は以下の通りです。  ・iのループの中にjのループがある。(iがループするごとに、jも0からループする)  ・jはi未満の間だけループする。 すると、当然のように、 1.i=0の時、j<iは成り立たず、1度も出力されない。(出力:なし) 2.i=1の時、j<iは1度成り立ち、1度出力される。(出力:0) 3.i=2の時、j<iは2度成り立ち、2度出力される。(出力:01) 4.i=3の時、j<iは3度成り立ち、3度出力される。(出力:012) 5.i=4の時、i<4は成り立たず、処理終了。 になります。 もしかしたらjの初期化を勘違いされていたりしますか? jの初期化は、一度きりではなく、ループが開始される度に行われます。 よって、jの初期化は、iのループ回数、つまり4回初期化されます。

skybkird
質問者

お礼

解説を見てスッキリしました。 求める内容ですのでベストアンサーにさせて戴きます。

その他の回答 (3)

  • tsunji
  • ベストアンサー率20% (196/958)
回答No.3

0 01 012 となっているだけ。 外側のループに改行コードを追加してみればよく分かるよ。

  • akito0417
  • ベストアンサー率20% (55/266)
回答No.2

>jの初期値を0してiの初期値も0にしているのになんで内側ループも回るかがわからないです。 何故ですか? 毎回内側のループに入るたびにjを0で初期化しているからです。 i=0の場合(1回目)  jを0で初期化  j = iなので、System.outはしない 外側のループに戻って、 1=1の場合(2回目)  jを0で初期化  j(0) < i(1)なので、System.outをする(0が出力される)  j(1)=i(1)なので、System.outはしない 外側のループに戻って、 i=2の場合  jを0で初期化  0 < 2なので、System.outをする(0が出力される)  1 < 2なので、System.outをする(1が出力される)  2 = 2なので、System.outをしない 以下省略 とまぁ、こんな感じのプログラムになっているからです。 どうしたいのかわかりませんが、jを毎回初期化したくないなら、forで初期化しないことです。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

? 外のループも回るよね.

関連するQ&A

専門家に質問してみよう