4.1.2 if選択制御文

35432 ワード

4.1.2 if選択制御文


if文は、条件式に基づいて文を実行するか否かを決定する選択制御文である.基本構文構造は大きく3つのタイプに分けられます.

タイプ①if単一構文


まず、タイプ1は条件式であり、カッコの構造であり、「条件式=true」ではカッコ内、「条件式=false」ではカッコ内は実行されません.
if 조건식 // (boolean 타입(true, false)만 가능)
{실행 구문; // (조건식이 true일 때만 실행)
}
タイプ①単一構文の例
if(5 > 3) {
System.out.println("출력1"); // 실행됨
}
if(5 < 3) {
System.out.println("출력2"); // 실행 안 됨
}
int a = 3;
if(a == 3) {
System.out.println("출력3"); // 실행됨 
}
boolean b = false 
if(b){
System.out.println("출력4"); // 실행 안 됨
タイプ1はif文の中で最も簡単な形式であり、条件式の真、偽に基づいて中括弧内の実行の有無を簡単に決定するため、非常に直感的である.
参照として、1番目と2番目の条件文(5>3)または(5<3)が実行されるかどうかを決定したため、実際にはほとんど使用できません.主に3番目と4番目の条件文のような変数を含む条件式が使用されます.
+)括弧を省略した場合の制御文の動作
if文を含むすべての制御文にはカッコが含まれており、省略するとコンパイラが自動的に挿入されます.この場合、コンパイラが挿入するカッコには、実行文が1つしか含まれていないことに注意してください.
コンパイラが挿入した制御文のカッコ
if(3 > 5) {
System.out.println("안녕"); // 출력 안 됨
System.out.println("방가"); // 출력 안 됨
}

if(3 > 5) {
System.out.println("안녕"); // 출력 안 됨. } -> 컴파일러가 자동으로 삽입한 중괄호
System.out.println("방가"); // 출력됨. 

タイプ②if-else構文


タイプ2には、if文の条件式がtrueの場合if文のカッコが1つ、falseの場合else文のカッコが2つあります.すべての条件式はtrueまたはfalseではないので、いずれかは実行する必要があり、どちらかは実行する必要があります.タイプ②のelse文は省略できますが、タイプ②の構文はタイプ①と同じです.
if(조건식) {
실행 구문; // 조건식이 true일 때만 실행
}

else {
실행 구문; // 조건식이 false일 때만 실행 
} 

else~ 생략 가능 (생략했을 때 유형 ①)
タイプ②は,条件式の結リンゴ値に基づいて両者の中から1つを選択する制御文であり,先に学習した3つの演算子と相互に変換できる.
タイプ②if-else構文の例
//if 문 유형 ② if-else 구문
if (5 > 3) {
System.out.println("실행1"); // 실행됨 
} else {
System.out.println("실행2"); // 실행 안 됨
}

//if 문 유형 ② if-else 구문
int a, b; 
a = 5; b = 0;
if(a > 5){
b = 10; // 실행 안 됨
}else  {
b =20; // 실행됨
}
System.out.println(b); // 20

//삼항 연산자로 전환
a = 5; b = 0;
b = (a > 5) ? 10 : 20;
System.out.println(b); // 20
タイプ③if-else if-else構文
最後に,タイプ3は,if−else if−elseの構造であるN個の条件式とN+1個の括弧を含む.中間のelse if文も省略できますが、省略するとタイプ②の形式になります.もちろん,else文を省略すると,タイプ1の形式となる.
if(조건식 1) { 
실행 구문; // 조건식 1이 true일 때 실행한 후 제어문 탈출
} 
--else if (조건식 2)
실행 구문;  // 조건식 2가 true일 때 실행한 후 제어문 탈출 
...
else if (조건식 N) {
실행 구문; // 조건식 N이 true일 때 실행한 후 제어문 탈출
}-- // -- ~ -- 생략 가능(생략했을 때 유형 ②)
else { 
실행 구문; // 모든 조건식이 false일 때만 실행
} 
else if文は、if文のように括弧に条件式を含む個数の追加を考慮しなくてもよい.タイプ③で覚えておきたいのは、条件式を検索するときは常に上から、条件式がtrueの中括弧ブロックに初めて遭遇したときに、そのブロックの中括弧を実行しif文から逃げることです.すなわち、100個の括弧があっても、最初の真のブロックのみが実行されます.もちろん、すべての条件式がfalseの場合、最後のelse文が実行されます.
🌳タイプ③if-else if-else構文を使用してスコアを単位に変換する例1
//90 이상 : A, 80 이상 ~ 90 미만 : B, 70 이상 80 미만 : C, 70 미만 F
int a = 85;
if(a > 90) {
System.out.println("A학점");
}
else if(a >= 80) {
System.out.println("B학점"); // 처음 조건식이 참인 블록을 실행한 후 if 문 탈출 
}
else if(a >= 70) {
System.out.println("C학점");
}
else { 
System.out.println("F학점");
}
すべての条件式は上から下へ順にチェックされ、最初の条件式はa>=80である.したがって、システムは、この条件式の実行ブロックである.out.println(「B単位」)出力、ifゲート全体出力.つまり、次の条件式(a>=70)も本当ですが、この条件式は全然読まないのです.
では、次のコードを見てみましょう.先ほど知ったコードとまったく同じで、A単位とC単位を出力する条件式の順序だけが変更されました.
🌳タイプ③if-else if-else構文を使用してスコアを単位に変換する例2
int a = 85;
if(a >= 70) {
System.out,println("C학점"); // 처음 조건식이 참인 블록을 실행한 후 if 문 탈출
}
else if(a >= 80) {
System.out.println("B학점");
}
else if(a >= 90) {
System.out.println("A학점");
}
else { 
System.out.println("F학점");
}
ここで最初の条件式はa>=70であるため、「C単位」が出力される.単純に順序を変えただけですが、条件式のif文タイプ③の特徴を上から確認したため、結果は全く違います.したがって,if文型③を記入する際には,多くの条件式で真の値が現れる可能性がある場合は,順番に記入する.
条件式の順序に関係なく、常に同じ結果が得られるようにするには、次の例のすべての条件式の条件式を参照するだけです.もちろん、最初の参照が表示される条件式は一意の条件式であるため、順序にかかわらずブロックのみが実行されます.
🌳タイプ③if-else if-else構文を使用してスコアを単位に変換する例3
int a = 85;
if(a >= 70 && a < 80) {
System.out.println("C학점");
}
else if(a >= 80 && a <90) {
System.out.println("B학점");
}
else if(a >= 90) {
System.out.println("A학점");
}
else {
System.out.println("F학점");
}
+)変数の範囲を表す
変数値の範囲を指定する場合、数学式では70<=a<80と表すことができますが、javaコードではそれらを分離し、論理演算子で接続する必要があります.すなわち、70<=a<80はa>=70&a<80に変更して作成すべきである.

実習

        // 유형 1 : if
        int value1 = 5;
        if(value1 > 3) {
            System.out.println("실행1");
        }
        if(value1 < 5) {
            System.out.println("실행2");
        }

        boolean bool1 = true;
        boolean bool2 = false;
        if(bool1){
            System.out.println("실행3");
        }
        if(bool2){
            System.out.println("실행4");
        }

        //유형 2 : if-else
        int value2 = 5;
        if(value2 > 3) {
            System.out.println("실행5");
        }
        else {
            System.out.println("실행6");
        }

        //cf. 삼항 연산자와 변환 가능
        System.out.println((value2 > 3) ? "실행5" : "실행6");
        System.out.println();

        //유형 3 : if-else if-else if-...-else
        int value3 = 85;
        if(value3 >= 90) {
            System.out.println("A학점");
        }
        else if(value3 >= 80){
            System.out.println("B학점"); // 실행한 후 탈출
        }
        else if(value3 >= 70){
            System.out.println("C학점");
        }
        else {
            System.out.println("F학점");
        }

        if(value3 >= 70) {
            System.out.println("C학점"); // 실행한 후 탈출
        }
        else if(value3 >= 80) {
            System.out.println("B학점");
        }
        else if(value3 >= 90) {
            System.out.println("A학점");
        }
        else {
            System.out.println("F학점");
        }

        if(value3 >= 70 && value3 < 80) {
            System.out.println("C학점");
        }
        else if(value3 >= 80 && value3 < 90) {
            System.out.println("B학점"); // 실행한 후 탈출
        }
        else if(value3 >= 90) {
            System.out.println("A학점"); 
        }
        else {
            System.out.println("F학점");
        }
結果