4.1.3スイッチ選択制御扉

26271 ワード

switch文は、ジャンプ位置変数値に基づいて特定の位置(case)に移動して文を実行する選択制御文である.ジャンプ可能な位置は「case witch値:」に設定されています.これにより、クローン(:)文字の値を移動する位置を指す看板と見なすことができます.case構文に加えてdefault:構文はif文のelse構文機能と類似しており、一致するシフト値がない場合にジャンプする位置を表す.default文は省略できます.
スイッチドアの構造
switch(점프 위치 변수) { // 점프 위치 변수 : 정수, 문자. 문자열 사용 가능
case 위칫값 1 : //점프 위치 변수 = 위칫값 1이면 이 위치로 이동 
실행 구문; 
case 위칫값 2 : //점프 위치 변수 = 위칫값 2이면 이 위치로 이동 
실행 구문;
...
case 위칫값 n : //점프 위치 변수 = 위칫값 n이면 이 위치로 이동 
default: //일치하는 위칫값이 없을 때 이 위치로 이동 
실행구문; // default ~ : 생략 가능
}
もう一度言いますが、スイッチドアの役割は特定の位置に移動することです.したがって,動作はif文とはやや異なる.次の例を示します.
switch文を使用してジャンプする例
int a = 2;
switch(a) {
case 1:
System.out.println("A");
case 2: // switch(a)에 따라 case 2:로 이동한 후 차례대로 구문 실행
System.out.println("B"); // 실행됨 
case 3:
System.out.println("C"); // 실행됨
default:
System.out.println("D"); //실행됨 
}
a値が2であるため,switch文の役割は実行順序をcase 2:に移動することである.これが全てです.次に、元のプログラム実行順に1行行います.だからB,C,Dは出力されます.ここでcase 2:構文はコマンドを実行するのではなく、位置決めカードにすぎず、操作を実行しません.これは、条件式がtrueの最初のブロックのみを実行するif文とは異なります.
では、switch文もif文のように1つの実行文だけを実行することはできませんか?breakを使用してキーワードを制御すればいいです.制御キーワードは後述するが、ここで「break」は「if文以外の最も近い括弧({})」から逃れるキーワードであることを覚えておいてください.つまり、switchドアでbreakに遭遇するとswitchドアから逃げるということです.次の例では、次の結果を示します.
breakキーワードを含むswitch文の例
        int a = 2;
        switch (a) {
            case 1:
                System.out.println("A");
                break;
            case 2: //switch(a)에 따라 이동되는 위치
                System.out.println("B"); // 실행됨
                break; // switch 문을 탈출 
            case 3:
                System.out.println("C"); 
                break;
            default:
                System.out.println("D");
          }       
switch(a)は、実行順序をcase 2に移動し、「B」を出力する.「それからbreakに出会って、switchドアを出ます.」case構文を作成するときにbreak機能が含まれていればよかったのに...そう思う人もいます.でも、わざわざ休憩時間を外して番組を作っている人もいます.例えば、10点満点で7点以上の人が「Pass」、残りの人が「Fail」と出力します.
スイッチゲートを使用した7点以上のPass出力例1
int a = 8;
switch(a) {
case 10;
System.out.println("Pass"); break;
case 9;
System.out.println("Pass"); break;
case 8; 
System.out.println("Pass"); break; // 실행한 후 switch 문 탈출
case 7;
System.out.println("Pass"); break; 
default:
System.out.println("Fail");
}
一目で重複コードが多く、効率が悪いことがわかります.これは、case文ごとにpassまたはfailを出力するコマンドが1つしか実行されないため、case文ごとに数十の操作が実行されると、コードの重複性がさらに深刻になります.1つの実行文に複数のcaseを指定すると、次の例に示すように、case文ごとにbreakキーを追加するのではなく、コードをより簡潔に記述できます.
swhitch文を用いた7点以上のPass出力例2
int a = 8;
switch(a) {
case 10:
case 9:
case 8:
case 7:
System.out.prinltn("Pass"); break;
default:
System.out.prinltn("Fail");
switch文は整数、文字、文字列のみを使用できる擬似値であり、if文は条件式の様々な比較演算子と論理演算子を使用できるため、効率的に異なる場合がありますが、基本的にswitch文はif文と変換できます.switch文とif文の動作原理を知れば,変換自体はそれほど難しくない.次の例は、switch文を用いて記述されたコードを、同じ機能を実行するif文のコードに変換する例である.
swtich文と同じ機能を実行するif文
int a = 8;

//switch 문
swtich(a) {
case 10:
case 9:
System.out.println("A");
break;
case 8:
System.out.println("B"); // 실행한 후 탈출
break;
case 7:
System.out.println("C");
break;
default:
Sysstem.out.println("D");
}

//if문
if(a >= 9) {
System.out.println("A");
}
else if (a == 8) {
System.out.println("B"); // 실행한 후 탈출
else if (a == 7) {
System.out.println("C");
else {
System.out.println("D");
}
では、switch文とif文の間にはどのようなパフォーマンスの違いがありますか?まず答えを言うと、全体の速度の差はほとんどありません.しかし、各結果には速度の差があります.たとえば、上記のif文では、「A」出力時に条件式が1つしかチェックされず、出力されます.「C」または「D」出力時には、3つの条件式を比較して出力されます.このため、100万個の「A」出力と100万個の「C」出力との間に速度が発生する可能性がある.逆に、スイッチドアの利点は、「A」を出力しても「C」を出力しても「D」を出力しても、1回のジャンプ運転のみが実行されるため、すべての出力速度が同じであることである.しかし、条件式の検査速度は非常に速く、数百万個のデータを一度に処理しない場合は、どれを使っても構わない.

実習


switch文(break、break、if文変換を除く)
 //break가 포함되지 않았을 때
        int value1 = 2;
        switch (value1) {
            case 1:
                System.out.println("A");
            case 2:
                System.out.println("B"); //점프한 후 계속 실행
            case 3:
                System.out.println("C");
            default:
                System.out.println("D");
        }
        System.out.println();

        //break가 포함되어 있을 때
        int value2 = 2;
        switch(value2) {
            case 1:
                System.out.println("A");
                break;
            case 2:
                System.out.println("B"); // 실행한 후 탈출
                break;
            case 3:
                System.out.println("C");
                break;
            default:
                System.out.println("D");

        }
        System.out.println();

        //if - else if - else 구문으로 변환
        if(value1 ==1) {
            System.out.println("A");
        }
        else if(value1 == 2) {
            System.out.println("B"); // 실행한 후 탈출
        }
        else if(value1 == 3) {
            System.out.println("C");
        }
        else{
            System.out.println("D");
        }
結果