[JAVA]制御文


せんたくぶん


JAvaの選択文はif - else if - else文とswitch - case文を使用します.
選択した文のサブコードブロック実行文が1行である場合、コードブロックで囲む必要がなく、文をスキップできます.
if(true)
	doSomthing();

//==
if(true){
	doSomthing();
}

if - else if - else


if


Javaでは、デフォルト条件文はif文で実装できます.
if(/*condition*/){
	//action
}
クエリー条件では、boolean式を入力する必要があります.サブコードブロックは、式の値がtrueの場合にのみ実行されます.

else

else文は、ifの条件がfalseの場合にのみ実行されます.同様に、コードブロックはelse節以降のコードブロックからなる.
なお、else文は省略することができる.
else{
	//action
}
else文は、if文に属し、if文と連続的に表現されなければならない.
//올바른 사용
if(true){
//action
} else{
//action
}

//잘못된 사용
if(true){
//action
}
int a = 10;
else{
}
//syntax error

else-if

else-ifゲートはelse節の使用にboolean条件式を加えた.同様に、if文に属し、if文がfalseの場合、他の条件式を使用するために記述される.elseと同様に省略できます.
if(true){
} else if(true){
} else{
}

switch - case

switch - caseは、式の戻り値を使用して複数のブランチを行う構文です.
式はswitch文に作成され、ブロックを実行するためにサブコードブロックcase文に文字を作成することができる.
この場合、switchの式の戻り値は、整数型primitiveタイプ、Rapperクラス、Stringまたはenumである必要があります.

Object a = "Hello";
String b = "Hello";

//에러, 조건식의 타입 불일치
switch(a){
}

switch((String)a){
	case "Hello" : 
//do something..
			break;

//에러, 반드시 리터럴 값을 가져야함
	case b :
}

default

defaultifゲートのelse条件を満たしている.switchのすべてのcaseが実行されない場合、default文が実行されます.

break

switch - case文は、次のすべての構文を実行します.したがって、caseは、コードフローにおいてフローを制御するために使用される.
switch (a){
	case 1 : a++;
	case 2 : a++;
	case 3 : a++;
					 break;
	case 5 : a--;
}

//case가 수행되면 break을 만날 때까지 모든 하위 문장을 수행

強化されたswitch-case


JVM 13から、breakを使用して、既存の問題を解決するためにいくつかの改良を行うことができる.
  • 多値switch - case
  • 戻り値switch - case
  • 矢印演算子(case)
  • コードブロック
  • Muti - value Case

    yieldゲートの分割は、一度に複数の条件を使用することができる.
    //이전 방식
    switch(score){
    	case 10 :
    	case 9 :
    	case 8 : 
    		System.out.println("A");
    		break;
    	case 7 :
    	case 6 :
    	case 5 : 
    		System.out.println("B");
    		break;
    	default :
    		System.out.println("C");
    }
    
    //JVM 13
    switch(score){
    	case 10, 9, 8 :
    		System.out.println("A");
    		break;
    	case 7, 6, 5 : 
    		System.out.println("B");
    		break;
    	default :
    		System.out.println("C");
    }
    

    yield

    case文で使用し、,文を返します.したがって、式としてswitch文を使用することができます.
    System.out.println(
    	switch(score){
    		case 10, 9, 8 :
    			yield "A";
    		case 7, 6, 5 : 
    			yield "B";
    		default :
    			yield "C";
    	});
    
    String str =
    	switch(score){
    		case 10, 9, 8 :
    			yield "A";
    		case 7, 6, 5 : 
    			yield "B";
    		default :
    			yield "C";
    	}
    

    コードブロック


    コードブロックは、switch内で使用することができる.

    矢印キー


    式、構文、およびコードブロックは、矢印演算子switchで表される.
    String grade;
    switch(score){
    	case 10, 9, 8 -> grade = "A";
    	case 7, 6, 5 -> grade = "B";
    	default -> grade = "C";
    }
    リファレンス
    https://docs.oracle.com/en/java/javase/13/language/switch-expressions.html

    複文


    Javaの重複文はcaseまたはcaseの文からなる

    while

    while文は、生成されたfor式がwhileではないまで、サブブロックを繰り返し実行する.
    //무한 루프
    while(true){
    //action
    }

    do - while

    boolean文は、まずtrueサブコードブロックを実行し、その後、do - whileの条件に従ってコードブロックを繰り返す.
    //action을 최소 한번 수행하고 이후 while 조건에 따라 반복
    do{
    	action();
    } while(isTrue());

    for

    do文はwhileで構成され、次の順序で実行されます.
  • エントリーレベル:
  • は最初に1回のみ実行されます.
  • 条件式:for式、実行を続行するかどうかを判断
  • コードブロック:実行ロジック
  • インクリメンタル:文変更条件
  • を実行
    初期式、条件式、コードブロック、インクリメンタルは省略できますが、必要に応じて作成できます.
    //for 구조
    for(int a = 1; a < 10 ; a++){
    	System.out.println(a);
    }
    
    //모두 생략, 아무 행위가 없지만 무한루프
    for(;;);

    しょき式


    構文を1回だけ使用すると、for(초기식 ; 조건식 ; 증감식) { 코드블럭 }ループ内でのみ参照可能な領域変数を宣言できます.
    さらに、1つのboolean変数のみが宣言され、forを使用して同じタイプの複数の変数を宣言することができる.
    for(int a = 10, b;;);
    
    //error
    for(Object o, int a;;);

    条件文

    type式を使用して記述され、条件に従ってコードブロックが繰り返される.
    for(int a = 10; a < 10 ;);

    コードブロック


    条件文が,の場合、実行するコードブロックが作成されます.

    増減式


    デフォルトでは、インクリメンタル演算は実行できますが、すべての文をインクリメンタルとして宣言できます.コードブロックを作成した後に実行する式.booleanを使用して複数の文を作成できます.
    for(int a = 10; a < 10; a++, myMethod(), b += 20);

    強化されたfor文


    既存のtrueゲートとは異なり、,とともに使用することができる.forインプリメンテーションオブジェクト(コレクション)または配列を使用して重複する研究レポートを作成し、宣言されたタイプ名を使用してオブジェクトをコピー(深さ)し、重複を実行します.
    オブジェクトのfor( 타입 레퍼런스 : Iterable 구현체)Iterebleメソッドは、iterator、すなわち、データ構造の最初のデータから最後のデータ構造まで繰り返される.
    //Iterable을 상속한 Collections의 상속 인터페이스 list, 구현체 ArrayList
    List<Integer> list = new ArrayList<>();
    
    for(Integer a : list){
    	//a 는 해당 객체의 깊은 복사본이므로 원본 객체 수정 불가능
    	a = 10;
    }

    break, continue


    break


    繰り返し条件文(hasNext())の実行ブロック内にtrueが作成されると、その条件文のコードブロックが飛び出します.
    for(/*...*/){
    	if(isTrue()) break;
    }
    
    while(/*...*/){
    	if(isTrue()) break;
    }

    continue


    繰り返し条件文で作成し、コードブロック内のサブコード実行を省略し、インクリメント後に条件チェックを再実行します.
    //isTrue() 가 false 일 때만 출력
    for(/*...*/){
    	if(isTrue()) continue;
    	System.out.println("출력");
    }
    
    while(/*...*/){
    	if(isTrue()) continue;
    	System.out.println("출력");
    }

    continue - loop


    親に宣言された重複文にはwhile(), for()という名前が付けられており、このループをbreakと命名することができます.
    loop1 :
    while(true){
    	while(true){
    		//isTrue()가 true 이면 상위의 반복문으로 이동하여 반복을 계속 진행
    		//해당 루프의 출력 1 과 출력 2 모두 continue 됨
    		if(isTrue()) continue loop1;
    		System.out.println("출력1");
    	}
    	System.out.println("출력2");
    }