Java | switch文

Java Java
スポンサーリンク

Javaのswitch文の基本

「ある値がどれに当てはまるかで処理を切り替える」ための文法です。if-elseをズラッと並べるより、候補がはっきり決まっているときに見通しよく書けます。

switch (式) {
  case 値1:
    // 値1のときの処理
    break;
  case 値2:
    // 値2のときの処理
    break;
  default:
    // どれにも当てはまらないとき
}
Java

使いどころと基本ルール

  • 使いどころ: 選択肢が決まっているとき(例:1〜7の曜日、”yes”/”no”、メニュー番号など)。
  • 評価の仕方: switchの「式」を計算し、caseの値と「一致する場所」から処理が始まります。
  • breakの役割: 各caseの最後で処理を止めるもの。忘れると次のcaseへ処理が流れ続けます(これを「フォールスルー」と呼びます)。
  • defaultの役割: どのcaseにも当てはまらないときの「保険」。省略可能ですが、入れておくと安全です。
  • 使える型: int, char, byte, short, String, enum(doubleやlongは不可)。
  • caseの値: 定数のみ。変数や計算式は不可(例:case x+1; は書けない)。

例題で理解する

例題1:数字で曜日を表示(1〜7以外はエラー)

int day = 3;

switch (day) {
  case 1:
    System.out.println("月曜日");
    break;
  case 2:
    System.out.println("火曜日");
    break;
  case 3:
    System.out.println("水曜日");
    break;
  case 4:
    System.out.println("木曜日");
    break;
  case 5:
    System.out.println("金曜日");
    break;
  case 6:
    System.out.println("土曜日");
    break;
  case 7:
    System.out.println("日曜日");
    break;
  default:
    System.out.println("1〜7の数字を入力してください");
}
Java
  • ポイント: 候補が明確(1〜7)なのでswitchが向いている。

例題2:複数の値で同じ処理(偶数・奇数)

int num = 4;

switch (num) {
  case 1:
  case 3:
  case 5:
  case 7:
  case 9:
    System.out.println("奇数");
    break;
  case 2:
  case 4:
  case 6:
  case 8:
  case 10:
    System.out.println("偶数");
    break;
  default:
    System.out.println("想定外の数値です");
}
Java
  • ポイント: 同じ結果にしたいcaseは「並べる」だけでOK。最初に一致した場所からbreakまで実行。

例題3:文字列でメニュー選択(String対応)

String cmd = "help";

switch (cmd) {
  case "start":
    System.out.println("アプリを開始します");
    break;
  case "stop":
    System.out.println("アプリを停止します");
    break;
  case "help":
    System.out.println("ヘルプを表示します");
    break;
  default:
    System.out.println("不明なコマンドです");
}
Java
  • ポイント: JavaはStringにも対応。ユーザー入力のコマンド分岐に便利。

例題4:breakを忘れるとどうなる?(フォールスルー)

int level = 2;

switch (level) {
  case 1:
    System.out.println("初級");
  case 2:
    System.out.println("中級");
  case 3:
    System.out.println("上級");
    break;
  default:
    System.out.println("レベル不明");
}
Java
  • 結果: levelが2でも「中級」「上級」と2つ表示される。case2でbreakがないためcase3へ「流れる」。
  • 学び: 意図してない連続実行になりやすいので、基本は各caseにbreakを書く。

例題5:意図的なフォールスルーで範囲をまとめる

int score = 85;

switch (score / 10) { // 10点刻みに分類
  case 10:
  case 9:
    System.out.println("評価:A");
    break;
  case 8:
  case 7:
    System.out.println("評価:B");
    break;
  case 6:
  case 5:
    System.out.println("評価:C");
    break;
  default:
    System.out.println("評価:D");
}
Java
  • ポイント: 「score/10」で切り捨ててグループ化。Aは90〜100、Bは70〜89…のように簡潔に書ける。

つまずきやすいポイントと対策

  • breakの書き忘れ:
    • 対策: まず「各caseの最後にbreak」を癖づける。意図的にフォールスルーする場合はコメントで明示。
  • 型の不一致:
    • 対策: switch(式)とcaseの値は同じ型で比較される。StringならcaseもString、intなら整数。
  • defaultの欠落:
    • 対策: 仕様で「想定外はありえない」と決まっていない限り、defaultで安全なメッセージや処理を用意。
  • 動的値をcaseに書いてしまう:
    • 対策: caseにはリテラルや定数だけ。動的判断が必要ならif-elseを使う。

練習課題

  • 課題1: ユーザーが入力した月番号(1〜12)から季節(春/夏/秋/冬)を表示するプログラムをswitchで作る。
    • ヒント: 3,4,5→春/6,7,8→夏/9,10,11→秋/12,1,2→冬。複数のcaseを並べる。
  • 課題2: 自販機メニュー(”cola”, “tea”, “water”)をStringのswitchで処理し、価格を表示。その他は「在庫なし」。
  • 課題3: 点数を受け取り、例題5のようにA〜Dの評価を表示。score/10を使ってグループ化。
  • 課題4: enumを使って「Small/Medium/Large」のサイズをswitchで分岐して、送料を表示。 enum Size { SMALL, MEDIUM, LARGE }

解答と解説

課題1:月番号から季節を表示

int month = 4;

switch (month) {
  case 3:
  case 4:
  case 5:
    System.out.println("春");
    break;
  case 6:
  case 7:
  case 8:
    System.out.println("夏");
    break;
  case 9:
  case 10:
  case 11:
    System.out.println("秋");
    break;
  case 12:
  case 1:
  case 2:
    System.out.println("冬");
    break;
  default:
    System.out.println("1〜12の数字を入力してください");
}
Java
解説
  • 同じ季節に属する月を並べて書くことで、まとめて処理できる。
  • breakを忘れると次の季節まで流れてしまうので必ず書く。
  • defaultは「想定外の入力」に備える安全策。

課題2:自販機メニュー(String)

String drink = "tea";

switch (drink) {
  case "cola":
    System.out.println("150円です");
    break;
  case "tea":
    System.out.println("120円です");
    break;
  case "water":
    System.out.println("100円です");
    break;
  default:
    System.out.println("在庫なし");
}
Java
解説
  • Javaのswitch文字列(String)も扱える。
  • ユーザー入力をそのまま分岐に使えるので便利。
  • caseの値は定数文字列でなければならない。

課題3:点数から評価(A〜D)

int score = 85;

switch (score / 10) { // 10点刻みで分類
  case 10: // 100点
  case 9:  // 90〜99点
    System.out.println("評価:A");
    break;
  case 8:
  case 7:
    System.out.println("評価:B");
    break;
  case 6:
  case 5:
    System.out.println("評価:C");
    break;
  default:
    System.out.println("評価:D");
}
Java
解説
  • score / 10で「十の位」を取り出す。
  • 90〜100点は「9または10」なので同じ処理にまとめられる。
  • こうすると「範囲ごとの評価」を簡潔に書ける。

課題4:enumを使ったサイズ分岐

enum Size { SMALL, MEDIUM, LARGE }

public class Main {
  public static void main(String[] args) {
    Size s = Size.MEDIUM;

    switch (s) {
      case SMALL:
        System.out.println("送料:200円");
        break;
      case MEDIUM:
        System.out.println("送料:400円");
        break;
      case LARGE:
        System.out.println("送料:600円");
        break;
      default:
        System.out.println("サイズ不明");
    }
  }
}
Java
解説
  • enumは「決まった選択肢」を表す型。
  • switchと組み合わせると「候補が限定されている」場合に非常に読みやすい。
  • caseにはenumの定数名をそのまま書く。

まとめ

  • 課題1 → 複数のcaseを並べて季節を分類。
  • 課題2 → Stringを使ったメニュー分岐。
  • 課題3 → 数値をグループ化して評価。
  • 課題4 → enumで選択肢を限定して分岐。

👉 どれも「if-elseで書けるけど、switchを使うとスッキリする」例です。

Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました