こんにちは! 「きゃのん」です。
今週から自宅でネットができるようになってめちゃくちゃテンション上がってます!
いや、今までできんかったんかい・・・
って思われそうなので、ちょっと説明すると、
1月まではできてたんですよー。
ただ、2月にお引越しする予定だったので、1月の真ん中くらいにプロバイダに連絡して、
引越し先でもそのまま使いたいって伝えたんです!
そしたら、「工事すれば使えますよ!いつ頃がいいですか?」って聞かれたので、
できるだけ早くで!ってお願いしました。
「わかりましたー、すぐ予約しますね!」って言われて待つこと3分後、
「予約できました!2ヶ月後です!」
え、2ヶ月後…?最短で2ヶ月ですか…?
「そうですねー、時期が時期なのでー。」
なんだろ、魔法の言葉だよなー、「時期が時期なので」って。
これを言われると、お願いも文句も何も言えなくなりません?しょーがないよ、時期のせいなんだもん。
相手のせいじゃないんだ、時期が悪いんだもん。
自分のせいでもないもん、時期が悪いだもん。
じゃあ、諦めるしかないよなー、時期が悪いんだもん。ってなりますよね…
遅刻したり締切に間に合わなかった時とかに使ってみようかな…
そして何年振りかのネット難民生活…
スマホのギガは数日で消えてなくなり、ネットのために喫茶店に入り浸って、
こいつコーヒー一杯でどんだけ粘るんだよ!っていう店員さんの視線に怯える日々…
それも、これで終わりです!!
あー、でも今月のスマホのギガは無いままだ…。
◆前回の予告通り、Javaを勉強してて分かりづらかった部分を紹介します!
for文って、とっても便利で使いやすいんです。
例①
for (int i = 0; i < 5; i ++ ) { System.out.println("こんにちは、Java!"); }
for文は、
for(①; ②; ③) {④}
という構造を持っており、それぞれの部分は、
①そのfor文内でのみ使用できる変数の宣言と初期化ができる
②ここが「true」を返す間、{④}の処理を行う
③{④}の処理をした後、ここの処理を行う
という機能があります。
なので、例①は、
「こんにちは、Java!」と表示する度に、0だった i に1を足していき、 i が5になったら、表示を辞めなさい!
という意味のコードになっているんですね。
では、次のコードはどういう意味になっているでしょうか?
例②
for ( int i = 0; i < 5; i ++ ) { System.out.println("こんにちは、Java!") ; for (int j = 0; j < 3; j ++) { System.out.println("テストだよ"); } }
なんと、for文の中にfor文が入ってしまっている!
ややこしいけど、順番に何が起きるか見ていきましょう。
(便宜上、1行目に出てくるfor文を「大きなfor文」、3行目に出てくるfor文を、「小さなfor文」と呼びます。)
まず、大きなfor文の System.out.println(“こんにちは、Java!”) ;
これが一番最初に処理されそうですね。でも、大きなfor文の{④}の処理には
まだ続きがあるので、まだ i に1は足さず、0のままです。
次は、小さなfor文の System.out.println(“テストだよ”);
どうやらこれが処理されそうです。
すると、小さなfor文の{④}の処理は終わったので、 j に1が足され、j = 1 となりますが、
まだj < 3なので、小さなfor文の System.out.println(“テストだよ”); が再び処理される…
という繰り返しが、j が3になるまで続きます。
j = 3 になると、②の j < 3 がfalseを返すので、小さなfor文のループが終わります。
と、同時に! 大きなfor文の{④}の処理が終わりましたね!
ここで i に1が足され、i = 1 となりますが、まだi < 5なので、大きなfor文のループが始まります。
この場合、2回目の小さなfor文のループは始まるんでしょうか?
j はさっきのループで3になってしまったから、j < 3がtrueにならないんじゃ?
ということは、小さなfor文の処理は飛ばされる?
いやいや、for文の①の機能は、
「そのfor文内でのみ使用できる変数の宣言と初期化ができる」でしたね。
そのため、j は小さいfor文のループが終わったタイミングで役目を終え、
それ以降はもう宣言されていないものとして扱われてしまいます…
そして、小さいfor文の①の部分で、再度宣言と初期化をされ、
新しく j = 0 として復活し、小さなfor文をまた3回ループさせるのです!
この大きなfor文と小さなfor文のループは、i が5になるまで続きます。
つまり、例②のコードは、「こんにちは、Java!」を1回、「テストだよ」を3回表示させる、
という動作を、5回繰り返しなさい!という意味になっているんですねー!
最後に、これを応用して、Javaくんに九九をやってもらいましょう。
for ( int i = 1; i < 10; i ++ ) { System.out.ptintln(); for (int j = 1; j < 10; j ++ ) { System.out.ptint( i * j + " "); } }
ここまで読んでくれた人には、きっとどんな処理がされていくかイメージが浮んでいるはず!
もうfor文がいくら重なってても怖くない!
◆感想
for文の中にfor文があったらどうなるの?ということを説明したかっただけなんですが、
随分と長い記事になってしまいました。
勉強するよりも、その成果を説明する方が難しいかも知れません…
ですが、一見ややこしそうでも、処理を処理順通りに一個ずつ追って行けば、
そのコードは何を意味しているのかがわかる!という説明にはなっているかな?
◆最後に…
お読みいただき、ありがとうございます!
果たして、これだけの文量を読んでくれる方が何名いるのか…
しかも、実は、今回の内容は、本当に説明したい内容では無いんです。
それを含めると更に長くなってしまうため、次回に分割することにしたんですが、
for文の中にfor文の中にif文、という組み合わせで面白いものを出力させることができるんです!
研修で一番頭を悩ませた内容でしたが、その分理解できた時にすごく気持ちが良かったとこなので、
次回こそ、それを紹介したいなー。
最後に一言。
誰か僕にわかりやすく説明する能力とスマホのギガを分けてください!