switch 条件分岐 - 萌えJava超入門
第九章 制御文

switch文(条件分岐)

数値によって異なる処理を行うための命令です。
if分では booleanで分岐しますが、
switch文では intで分岐します。

switch( int ){
  case 0:  処理0;
    break;
  case 1:  処理1;
    break;
  case 2:  処理2;
    break;
  default: 処理D;
}

高機能で少し敷居が高い構文だが、
分岐が多くなる場合には迷わず使いたい。

目次


1.書式

書式
switch( 値 ){
  case 値A:
    値が値Aのときの処理;
    break;
  case 値B:
    値が値Bのときの処理;
    break;
  case 値C:
    値が値Cのときの処理;
    break;
  default:
    どの条件にも一致しなかった場合の処理;
}

「値」はintで指定します。
「値」が caseの値に一致すると、breakに当たるまで、それ以降の caseも次々に実行します。
break があったところでswitch文を抜けます。
defaultは、どの条件にも一致しなかった場合に実行されます。
if文と同じ感覚で使用する場合は、書式にあるようにすべての case に breakを記述します。



2.使い方1

//Sample38_41.java
class Sample38_41{
    public static void main(String[] args){
      int x = 1;
      switch( x ){
        case 0:
          System.out.println("0です。");
          break;
        case 1:
          System.out.println("1です。");
          break;
        case 2:
          System.out.println("2です。");
          break;
        default:
          System.out.println("一致しません。");
      }
    }
}

コマンドライン
>javac Sample38_41.java
>java Sample38_41
1です。



3.解説

  • case のあとの数値は intの範囲であれば、大きな数値でも、マイナスでも構いません。
  • case のあとの数値は 降順でなくても構いません。
  • case のあとの数値は 歯抜けになっていても構いません。
  • case のあとの数値は 重複できません。
  • case に一致すると、breakに当たるまでその下の caseも次々に実行します。
  • default はどのcaseにも一致しなかった場合に実行されます。
  • default は省略できます。
  • default は最後である必要はありませんが、意図がある場合を除いて最後に書きます。



4.使い方2

//Sample38_42.java
class Sample38_42{
    public static void main(String[] args){
      int x = 1;
      switch( x ){
        case 0:
          System.out.println("0です。");
        case 1:
          System.out.println("1です。");
        case 2:
          System.out.println("2です。");
          break;
        default:
          System.out.println("一致しません。");
      }
    }
}

コマンドライン
>javac Sample38_42.java
>java Sample38_42
1です。
2です。

この例では、「case 1:」でヒットして、
その後さらに「case 2:」を実行しました。
「case 2:」の最下行で breakして、switch文を抜けました。


breakに当たるまで、
下の caseも実行しちゃうの?
そうなんだ。
if文との大きな違いだ。
if文は1つの条件しか実行しないが、
switch文は、複数の条件を
実行させることができる。
breakを使えるようにならないと
switch文は使えないってことですね。
その通りだ。
あと気をつけたいのは、
breakの下にはソースコードを記述できない。
breakするから絶対に使われることが無いからだ。
なるほど。
breakの下にはソースコードを記述できません
      int x = 1;
      switch( x ){
        case 0:
          System.out.println("0です。");
        case 1:
          System.out.println("1です。");
        case 2:
          System.out.println("2です。");
          break;
          /*ここには書けません。*/
        default:
          System.out.println("一致しません。");
      }




5.使い方3

複数の caseをヒットさせるためには、上下の位置関係が重要です。
下にある caseは、上にある caseがヒットした場合でも実行されます。
//Sample38_43.java
class Sample38_43{
    public static void main(String[] args){
      double sei = Math.random() * 7;
      int x = (int)sei;//0~6 のランダム
      System.out.println("x は、" + x);
      switch( x ){
        case 0:
        case 5:
        System.out.print("メガ");
        case 1:
        case 2:
        case 3:
        case 4:
        System.out.println("進化です!");
        break;
        default:
        System.out.println("進化しません。");
        }
        System.out.println("---------------");
    }
}

コマンドライン
>javac Sample38_43.java
>java Sample38_43
x は、6
進化しません。
---------------

>java Sample38_43
x は、2
進化です!
---------------

>java Sample38_43
x は、0
メガ進化です!
---------------

>

case 0 と case 5 は、メガ進化できる!


6.charでも使える

charの実態は整数です。switch文で使えます。

//Sample38_44.java
class Sample38_44{
    public static void main(String[] args){
      char ch = 'A';
      switch( ch ){
        case 'A':
          System.out.println("it's A");
          break;
        case 'B':
          System.out.println("it's B");
          break;
        case 'C':
          System.out.println("it's C");
          break;
        default:
          System.out.println("Other than");
      }
    }
}

コマンドライン
>javac Sample38_44.java
>java Sample38_44
it's A
何に使えるのかはわからない。
面白かったので紹介した。



え~と、
理解は深まるっスよ?


7.if文とswitch文の使い分け

たいていの場合、if文でもswitch文でも書けるでしょう。
しいていえばこんな感じです。

if文
  文法的に読みやすい。
  分岐が多くなると、急に読みにくくなる。
  関係演算との相性がいい。

switch文
  分岐が多くてもきれいに書ける。
  整数と相性がいい。
  出来るプログラマになった気分になる。




switch文はこれでおしまいです。
お疲れ様でした。




© 2019 awasekagami