구문 : if (조건) {조건이 참이면 수행할 문장} else if() {} else{}
if처럼 조건식을 처리하지만, 경우의 수가 많아질 경우 유용하게 사용할 수 있다.
switch (조건식){
case 값1:
case 값2:
case 값3:
break;
...
default:
}
조건식을 받고, 그 값이 case 값
에 해당하는 구문으로 이동한다. 그 후 break
를 만날 때 까지 수행한다.
int level = 2;
switch (level) {
case 10: case 20:
System.out.println("admin");
case 0:
System.out.println("Level 0");
case 3:
System.out.println("get relocate permission");
case 2:
System.out.println("get enter permission");
case 1:
System.out.println("get submit permission");
case -1:
System.out.println("break required");
}
//get enter permission
//get submit permission
//break required
level
의 값이 2
이므로 case 2:
구문을 수행한다. 하지만 break;
가 존재하지 않아 switch
문의 끝까지 수행된다.
위 예시처럼 switch
의 작동 방식을 활용하여 유연하게 구현이 가능하다. 또, case를 묶어서 지정할 수 있다.
주의할 점은, if문과 다르게
switch문의 조건식의 결과는 정수 또는 문자열
case문의 값은 정수 상수만 가능.
int num;
int a = 10;
final B = 20;
switch (num){
// case 1.0: ERROR 정수만 가능
// case a: ERROR 변수는 불가
case B: //정수, 상수는 가능
case '1': //문자 리터럴 가능 ('1' => 49 정수 상수)
}
Switch문은 if와는 다르게 해당 조건식이 한 번만 계산된다. 처리하는 조건에 따라 가독성과 성능을 고려하여 유연하게 사용하자.
for(초기화; 조건식; 증감식) {}
for (int i = 1; i <= 3; i++) { System.out.println(i) }
// 1
// 2
// 3
for (int i = 1, j = 3; i <= 3; i++, j--) {
System.out.printf("%d %d %n", i, j);
}
// 1 3
// 2 2
// 3 1
#python
arr = [1,2,3,4]
for i in arr:
print(i, end=", ")
#1, 2, 3, 4
이처럼 문자열이나 배열, 컬렉션에 저장된 요소에 접근하는 방법이 존재한다.
//기본적인 for문
int[] arr = { 1, 2, 3, 4 };
for (int i = 0; i < arr.length; i++) {
System.out.printf("%d ", arr[i]);
} //1 2 3 4
//향상된 for문
for (int i : arr) {
System.out.printf("%d ", i);
} //1 2 3 4
항상 유용한건 아니지만, 배열이나 문자열에 접근할 때 유용하게 사용할 수 있다.
while (조건식) {수행 문장}
조건식이 참인 동안 수행. 주의할 점은, 수행이 되고 나서 조건식을 계산한다.
while문의 변형으로, 수행을 한 뒤 조건식을 계산한다.
최소한 한 번의 수행은 이루어 진다.
int i = 1;
do {
System.out.println("i = " + i);
} while (i < 1);
// i = 1 출력
int j = 1;
while (j < 1) {
System.out.println("j = " + j);
} //아무것도 출력 되지 않음
이러한 순서 차이는, 사용자의 입력을 처리할 경우 유용하게 사용된다.
break
: 근접한 하나의 반복문 종료continue
: 반복문의 끝으로 이동break는 하나의 반복문만 종료한다는 점을 유의하자.
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (j == 0) {
System.out.printf("i = %d, j = %d%n", i,j);
break;
}
}
}
/*
i = 0, j = 0
i = 1, j = 0
i = 2, j = 0
i = 3, j = 0
i = 4, j = 0
*/
break를 통해 근접한 반복문이 아닌 다른 반복문을 멈추고 싶으면, 그 반복문에 이름을 붙혀 지정할 수 있다.
"name" :
을 통해 가능하다.Loop1: for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
System.out.printf("i = %d, j = %d%n", i, j);
if (j == 3) {
break Loop1;
}
}
System.out.println(i);
}
/*
i = 0, j = 0
i = 0, j = 1
i = 0, j = 2
i = 0, j = 3
*/