こんにちは! 「きゃのん」です。
エンジニアの先輩と、 超有名サンドボックスゲーで遊びました!
このゲーム、電源のようなものを使って、電子回路みたいなものを作ることもできるんですが、
先輩、すげーでかい回路組んでた・・・。
ニワトリから卵を回収したり、焼き鳥にして回収したり、
ニワトリの数を増やしたり、減らしたり…
しかも回路を見せるために、一旦ぶち壊してまた直してた。
なんでも、ネットでやりたい機能を持った回路の構造を調べて、その機能を改修しながら作ったらしい。
これがエンジニアの遊び方なのか!って感動しました。
遊びも勉強の一環にするとは。見習わなくては…!
P.S. ダイヤの剣を無くしてごめんなさい。
でも隙があったら火を着けてきたり、地面に埋めたりしてくるのは、やめてください( ^ω^)
◆前回の記事で入りきらなかったやつ
~for文の中のfor文にif文を使ってみよう!~
早速ですが、こういう動作をするコードを書いてみましょう!
①ユーザに、数字を入力するよう求める
②入れた数字によって、以下のように図形を出力をする。
//1の時
■
■
//2の時
■
■■
■■
■
//3の時
■
■■
■■■
■■■
■■
■
//以下数字が増えるごとに、図形が大きくなっていく…
これを解くのに、大分長いこと頭を悩ませました・・・
まずは「① ユーザに、数字を入力するよう求める 」を解決しちゃいましょう。
//事前にjava.util.Scannerをインポートしておく。 //スキャナscanをインスタンス化 Scanner scan = new Scanner(System.in); //ユーザに数値を問いかけ、数値入力待ちにする System.out.print("好きな数値を入れてね:") int number = scan.nextInt();
これで、int型の変数numberに、ユーザが入力した数値が入るようになりました。
さて、ここからが問題です。numberの値からどのように課題の図形を描写させればよいでしょう。
前回のブログでは、for文の中にfor文がある場合を紹介しました。
numberが3の時を想定し、今回もfor文の中にfor文を使ってみましょう。
for(int i = 0; i < number ; i ++) { for(int j = 0; j < number ; j ++) { System.out.print("■"); } System.out.println(); //改行 }
小さなfor文で、numberの数だけ■を出力し、
それを大きなfor文で、numberの数だけ繰り替えしています。
そのため、number = 3のとき、次のように出力されます。
■■■
■■■
■■■
println()で改行し、もう一つ同じfor文を書くと、次のようになります。
■■■
■■■
■■■
■■■
■■■
■■■
課題の図形にかなり近づいてきました。
でも、空白でないといけない部分にも、■が表示されてしまっています…。
空白でないといけない部分を、□に置き換えてみましょう。
■□□
■■□
■■■
■■■
□■■
□□■
ここまで来ると、何をしたら良いかが大分わかりやすくなりましたね!
そう、if文を使い、■を出力するのか、□(空白)を出力するのかを場合分けしてやればいいんです!
それを踏まえて、小さいfor文の中を、以下のように書き直してみましょう。
//図形の上半分を出力する処理 for(int i = 0; i < number ; i ++) { for(int j = 0; j < number ; j ++) { if(j <= i) { System.out.print("■"); } else { System.out.print(" "); } } System.out.println(); //改行 } System.out.println(); //図形の間の分の改行 //図形の下半分を出力する処理 for(int i = 0; i < number ; i ++) { for(int j = 0; j < number ; j ++) { if(j < i) { System.out.print(" "); } else { System.out.print("■"); } } System.out.println(); //改行 }
これにて完成です!
それぞれのfor文のループ回数に応じて、空白を出力するのか、
■を出力するのかが切り替わるポイントが変化するのがお分かりいただけるでしょうか?
変化する位置も、i と j と numberの値で判断してくれるように書いているので、
もちろんユーザが3以外を入力しても、正しく動きますよ!
これで、前回の九九よりも、さらに複雑な処理をしてくれるようになりました!
◆感想
この問題は、空白の部分を□に置き換えて考えられるか
(ループ中に、□と■を分岐させるという発想にたどり着くか)
がポイントかなー?と自分的には思いました。
うまく説明できたかわからないけど、ノーヒントだと何をしたら良いかわからない、でも理解できたときにすごく気持ちいい!
となった部分なので、記事にしたかったのです。
◆最後に…
お読みいただき、ありがとうございます!
なんだかんだで研修は進み、JavaもSQLも終えることができました。
短い期間でなかなか頑張ったなぁ(ドヤァ)
でも、理解したからってすぐに使えるわけじゃない…。
読めるからって書けるわけじゃない。知ってるけど使い方がピンと来ない。
そういうところを今後は詰めていきたいなーと思ってます。
お家でもちゃんとコードを書こう!