- ベストアンサー
自分で組んでわからないです・・・
自分で考えても全くわからず質問しました。 わからないソースは以下のとおりです 出力結果は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にしているのになんで内側ループも回るかがわからないです。 何故ですか?
- みんなの回答 (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回初期化されます。
その他の回答 (3)
- tsunji
- ベストアンサー率20% (196/958)
0 01 012 となっているだけ。 外側のループに改行コードを追加してみればよく分かるよ。
- akito0417
- ベストアンサー率20% (55/266)
>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)
? 外のループも回るよね.
お礼
解説を見てスッキリしました。 求める内容ですのでベストアンサーにさせて戴きます。