switch 문에서 byte, short, int, char, string, enum을 변수로 사용할 수 있습니다.
변수 또는 수식이 될 수 있습니다.
switch 문에서 case로 전환하면 해당 값의 case 문이 실행되고 모든 기본 case 문 수식이 실행됩니다.
아래 Case 2로 이동하면 아래의 Case 2와 Case 1이 실행됩니다.
int a = 2;
switch (a) { // switch(변수 or 수식)
case 3 : System.out.print("*"); //case(리터널 or 상수)
case 2 : System.out.print("$");
case 1 : System.out.print("#");
}
사례 진술 공식의 분수; 가 실행되면 다음 case 문은 실행되지 않습니다.
switch(n) {
case 3: System.out.print("*");
System.out.print("#");
System.out.print("$");
break;
case 2: System.out.print("*");
System.out.print("#");
break;
case 1: System.out.print("*");
break;
}
마지막 case문의 Break는 생략할 수 있습니다.
Scanner sc = new Scanner(System.in);
int n;
System.out.println("정수 ? ");
n = sc.nextInt();
switch (n%3) {
case 0 : System.out.println(n + " : 3의 배수"); break;
case 1 :
case 2 : System.out.println(n + " : 3의 배수가 아님"); break;
// 마지막 break 는 생략 가능함
}
case 문은 여러 번 사용할 수 있으며, 다른 case 문에 적용되지 않는 값을 입력하면 default 문이 실행됩니다.
Scanner sc = new Scanner(System.in);
int n;
System.out.println("정수 ? ");
n = sc.nextInt();
// default : case 조건을 만족하는 것이 없는 경우 실행, 위치는 상관없음
switch (n) {
case 3 : System.out.println("***"); break;
case 2 : System.out.println("**"); break;
case 1 : System.out.println("*"); break;
default : System.out.println("입력 에러 입니다."); break;
}
String, Char 값이 변수로 존재할 수 있으며 여러 Case 문이 겹칠 수 있습니다.
Scanner sc = new Scanner(System.in);
char a;
System.out.print("한 문자? ");
a = sc.next().charAt(0);
// 입력 받은 문자가 문자숫자인지 판별
switch(a) {
case '0' : case '1' : case '2' : case '3' : case '4' : case '5' :
case '6' : case '7' : case '8' : case '9' : System.out.println("숫자"); break;
default : System.out.println("숫자가 아님"); break;
}
연도와 월을 구하고 해당 날짜의 마지막 날짜를 출력
Case 문은 여러 개 중첩될 수 있으며 2월은 윤년과 평년으로 인해 공식이 더 복잡합니다.
Scanner sc = new Scanner(System.in);
// 년도와 월을 입력 받아 마지막 월의 날짜 출력하기
int y, m, lastDay;
System.out.print("년도 ? ");
y = sc.nextInt();
System.out.print("월 ? ");
m = sc.nextInt();
switch (m) {
case 1: case 3: case 5: case 7: case 8: case 10:
case 12: lastDay = 31; break;
case 4: case 6 : case 9: case 11: lastDay = 30; break;
case 2:
lastDay = y%4==0 && y%100!=0 || y%400==0? 29 :28;
break;
/*
* if 문으로 풀어도 가능함
*/
default : lastDay = -1; break;
}
if(lastDay != -1) {
System.out.printf("%d년 %d월의 마지막 날짜는 %d일 입니다.\n", y, m, lastDay);
}else {
System.out.println("입력 에러입니다.");
}
