Javaの勉強をしています。ここで、下のようなswitch文が出てきました。
Java
1int val = 2; 2 3switch (val){ 4 case 1: 5 System.out.println(1); 6 case 2: 7 System.out.println(2); 8 case 3: 9 System.out.println(3);
これを実行すると2,3と出力されるのですがこれはなぜでしょう?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
switch
文の機能としては、val
の値で該当するcase ~:
にジャンプして、そのままswitch
文の最後まで全部実行するという事になっています。
途中でswitch
文の外に抜け出たい場合はbreak;
と書きます。
Java
1int val = 2; 2 3switch (val){ 4 case 1: 5 System.out.println(1); 6 break; 7 case 2: 8 System.out.println(2); 9 break; 10 case 3: 11 System.out.println(3); 12 break; 13}
投稿2017/12/29 07:20
総合スコア84423
0
break忘れは初心者が陥る典型的なエラーです。
原因については既に回答がついていますが、逆に当該挙動を利用したサンプルをご紹介します。
月が入力されたら季節を表示する
if文を使った場合
Java
1if(month == 3 || month == 4 || month == 5) { 2 System.out.println("春です"); 3} 4else if(month == 6 || month == 7 || month == 8) { 5 System.out.println("夏です"); 6} 7else if(month == 9 || month == 10 || month == 11) { 8 System.out.println("秋です"); 9} 10else if(month == 12 || month == 1 || month == 2) { 11 System.out.println("冬です"); 12} 13else { 14 System.out.println("そんな月ありません"); 15}
switch文を使った場合(1)
Java
1switch(month) { 2case 3: 3 System.out.println("春です") 4 break; 5case 4: 6 System.out.println("春です") 7 break; 8case 5: 9 System.out.println("春です") 10 break; 11case 6: 12 System.out.println("夏です") 13 break; 14case 7: 15 System.out.println("夏です") 16 break; 17case 8: 18 System.out.println("夏です") 19 break; 20case 9: 21 System.out.println("秋です") 22 break; 23case 10: 24 System.out.println("秋です") 25 break; 26case 11: 27 System.out.println("秋です") 28 break; 29case 12: 30 System.out.println("冬です") 31 break; 32case 1: 33 System.out.println("冬です") 34 break; 35case 2: 36 System.out.println("冬です") 37 break; 38default: 39 System.out.println("そんな月ありません"); 40}
switch文を使った場合(2)
Java
1switch(month) { 2case 3: case 4: case 5: 3 System.out.println("春です"); 4 break; 5case 6: case 7: case 8: 6 System.out.println("夏です"); 7 break; 8case 9: case 10: case 11: 9 System.out.println("秋です"); 10 break; 11case 12: case 1: case 2: 12 System.out.println("冬です"); 13 break; 14default: 15 System.out.println("そんな月ありません"); 16}
非常に簡潔に、分かりやすく記述出来ました。
慣れないうちは罠となる挙動ですが、上手く使えるとこのように非常に便利な場面があります。
投稿2017/12/29 09:59
総合スコア35658
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
break
がないからではないでしょうか?
投稿2017/12/29 07:16
総合スコア2043
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。