問題1-7
int型の変数monthが宣言してあります。変数monthは月を表しています。
変数monthの値が1、3、5、7、8、10、12の場合は「○月は31日まであります」と表示し、4、6、9、11の場合は「○月は30日まであります」と表示します。
2の場合は「2月は28、または、29日まであります」と表示します。
また、変数monthの値が1〜12以外の値の場合は「エラー」と表示してください。
条件分岐には必ずswitch文を使用してください。
【実行結果】
1月 1月は31日まであります
2月 2月は28、または29日まであります
4月 4月は30日まであります
13月 エラー
【SwitchBasicPractice.java】
public class SwitchBasicPractice { public static void main(String[] args) { int month = 1; // ←値を変更しながら実行 System.out.println(month + "月"); // switch文の開始 } }
解答例
【SwitchBasicPractice.java】
public class SwitchBasicPractice { public static void main(String[] args) { int month = 1; // ←値を変更しながら実行 System.out.println(month + "月"); // switch文の開始 switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: System.out.println(month + "月は31日まであります"); break; case 4: case 6: case 9: case 11: System.out.println(month + "月は30日まであります"); break; case 2: System.out.println("2月は28、または29日まであります"); break; default : System.out.println("エラー"); break; } } }
解説
Javaの条件分岐は、if文とswitch文の二種類があります。
switch文はif文ほど使われる機会はないかもしれませんが、Javaの基本ですのでしっかり押さえておきましょう。
switch文は注意しないと簡単に致命的なバグを含んでしまいます。
例えば、次のようなコードです。
switch(x){ case 1: System.out.println("one"); case 2: System.out.println("two"); }
これはswitch文では必ず言われる「break文の書き忘れ」という典型的なバグです。
このコードだと変数xの値が1の場合、「one」を出力した後に次のcase文まで処理が実行されていまい、「two」も出力されてしまいます。
このようなケースがありますので、switch文を書くときは、絶対にbreak文を書き忘れないように意識してください。
しかし、あえてbreak文を記述せずに連続して処理を実行するというテクニックもあります。
これを「フォールスルー」というのですが、今回の解答例ではそのテクニックを使って処理をまとめています。
もしフォールスルーを使わない場合、case文を1月から12月まですべて書かないといけなくなります。
それでも別に間違いではないのですが、System.out.println
の記述が冗長になってしまいます。
結論としては、switch文を記述する際は、常にbreak文を意識することです。
フォールスルーのためにbreak文をあえて記述しないのは良いのですが、くれぐれもうっかりでbreak文を書き忘れるといったことがないようにしましょう。
フォールスルーを行うときは、その旨をコメントでしっかり記述するのも良い習慣だと思います。
参考図書
LINE公式アカウント
仕事が辛くてたまらない人生が、仕事が楽しくてたまらない人生に変わります。
【登録いただいた人全員に、無料キャリア相談プレゼント中!】