AVA-4:制御文


4.制御文


4.1. 条件文


4.1.1 if~else文


if~else文は、関係演算子または論理演算子を用いてboolean結果値を返す条件式に基づいて実行フローを変更する.以下の形式は,最も基本的なif~else文を用いた条件文である.
if ( 조건식 ) {
    // 조건이 true 이면 실행
} else {
    // 조건이 false 이면 실행
}    
これらの条件の結果、実行されるコードブロックは異なり、他のコードブロックは実行されません.

なお、以下の条件で区分してもよい.
if ( 조건식 1 ) {
    // 조건식 1 이 true 이면 실행
} else if ( 조건식 2 ) {
    // 조건식 1 이 false 이고 조건식 2 가 true 이면 실행
} else {
    // 조건식 1 과 조건식 2 모두 false 이면 실행
}
ここで分かる点は、条件式を上から順にチェックし、現在の条件式が偽である場合にのみ次の条件式に移動し、現在の条件式が真である場合、コードブロックはif~els文を実行して終了することである.
if~else文をこのように重ねることもできます.
if( 조건식 1 ) {
    if ( 조건식 2 ) {
        // 조건식 1 과 조건식 2 가 true 이면 실행
    } else {
        // 조건식 1 은 true 이고 조건식 2 가 false 이면 실행
    }
} else {
    // 조건식 1 이 false 이면 실행
}

4.1.2 swtich文


switch文も条件文であり、主に入力された整数値、ENUMまたは文字列が予め設定された複数の値と一致するか否かを判断するために用いられる.これは上のif~else文で表すことができるが,switch文を用いるのが適切である.
以下if~else文で表す.
int num = 5;
int ret;
 
if (num == 0)      ret = num;
else if (num == 1) ret = num;
else if (num == 3) ret = num;
else if (num == 5) ret = num;
else if (num == 7) ret = num;
else               ret = num;
 
System.out.println(ret);입력하세요
次はswitchで同じ条件文を表します.
int num = 5;
int ret;
 
switch (num) {
case 0: ret = num; break;
case 1: ret = num; break;
case 3: ret = num; break;
case 5: ret = num; break;
case 7: ret = num; break;
default: ret = num; break;
}
System.out.println(ret);
上記の2つの条件文は同じ機能を提供していますが、動作には大きな違いがあります.
まず、ifelse文は、パフォーマンスの場合、各条件式を順次チェックし、制御フローを決定します.すなわち,N個の条件式があれば,N個の真偽を判断する.
ただし、switch文はifelse文とは異なり、JVMはswitch文のcase値の分布に基づいて内部で状況ごとに2つの最適化されたバイトコードを生成する.また、Lookup TableなどのLookupSwitchやTable Switchを使用すると、ifelse文ごとの最後の条件式は、前のすべての条件式とは異なり、場合によって同じアクセス時間が保証されます.
  • ifelse文O(n)
  • スイッチゲートO(1)
  • また、制御フローにおいては、switch文は、各変数値に対応するcaseから次のcaseを実行する構成であるため、break文により適宜分岐する必要がある.またdefaultは、前に設定したcaseに対応する値がない場合に実行する条件です.

    4.2. 複文


    繰り返し文とは

    4.2.1而文

    while( 조건식 ) {
        // 조건식이 참이면 실행
    }
    ドアは次の手順で操作されます.
  • 条件式真偽判断
  • 条件式が
  • である場合、コードブロック
  • が実行される
  • コードブロックを実行すると、1番目の項目から
  • を実行し続ける.
  • 条件式は偽であり、ゲート脱出
  • 4.2.2 for文

    for ( 초기화식 ; 조건식 ; 증감식 ) {
        // 조건식이 참이면 실행
    }
    for文は次の順序で操作されます.
    条件式の変数の初期化
  • 条件式真偽判断
  • 条件式が真の場合、コードブロックが実行される
  • 実行後増分更新変数情報
  • 第2項から
  • に復帰する.
  • 条件式が嘘なら脱出ゲート
  • 次はfor文の例で、1~10の繰り返し文を出力します.
    for (int i = 1 ; i < 11 ; i++){
        System.out.println(i);	//i 출력
    }

    4.2.3 do~while文


    do~while文はwhile文とは異なり,条件式の真偽に関係なく無条件に1回実行する構造である.
    do {
        // 실행
    } while ( 조건식 );
    実行手順は以下のとおりです.
  • doブロックでコード
  • を実行する.
  • 条件式の真偽判断
  • 条件式が真である場合、第1項からに復帰する.
  • 条件式が嘘ならdo~whileゲート脱出
  • 4.2.4ドアごと


    各文について、この名前は他の言語で主に使用され、強化されています.したがって,foreachは単独で存在するキーワードではなく,同じforを用いる.
    for ( 변수타입 변수 : 컬렉션 또는 배열 ) {
        // 코드
    }
    以下のように使用できます.
    ArrayList<String> numbers = new ArrayList<String>();
    numbers.add("one");
    numbers.add("two");
    
    for (String number : numbers) {
        System.out.println(number);
    }