Switch
if문은 조건식의 결과가 참과 거짓, 두 가지 뿐이라 경우의 수에 따라 식이 복잡해진다. 따라서, 하나의 조건식으로 많은 경우의 수를 처리할 수 있는 것이 switch문이다.
public static void main(String[] args) {
System.out.print("현재 월을 입력하세요 : ");
Scanner scanner = new Scanner(System.in);
int month = scanner.nextInt();
switch(month) {
case 3 :
case 4 :
case 5 :
System.out.println("현재의 계절은 봄입니다.");
break;
case 6 : case 7: case 8:
System.out.println("현재의 계절은 여름입니다.");
break;
case 9: case 10: case 11:
System.out.println("현재의 계절은 가을입니다.");
break;
default:
case 12: case 1: case 2:
System.out.println("현재의 계절은 겨울입니다.");
}
}
//결과
현재 월을 입력하세요 : 3
현재의 계절은 봄입니다.
public static void main(String[] args) {
System.out.println("가위(1), 바위(2), 보(3) 증 하나를 입력하세요");
Scanner scanner = new Scanner(System.in);
int user = scanner.nextInt();
int com = (int)(Math.random()*3)+1;
System.out.println("당신의 "+user+"입니다.");
System.out.println("컴퓨터는 "+com+"입니다.");
switch(user-com) {
case 2: case -1:
System.out.println("당신이 졌습니다.");
break;
case 1: case -2:
System.out.println("당신이 이겼습니다.");
break;
case 0:
System.out.println("비겼습니다.");
break;
}
}
public static void main(String[] args) {
System.out.print("주민번호를 입력해주세요 : ");
Scanner scanner = new Scanner(System.in);
String regNo = scanner.nextLine();
char gender = regNo.charAt(7);
switch(gender) {
case '1': case'3':
System.out.println("당신은 남자입니다");
break;
case '2': case '4':
System.out.println("당신은 여자입니다");
break;
default:
System.out.println("유효하지 않은 주민등록번호입니다");
}
}
//결과
주민번호를 입력해주세요 : 980925-1234567
당신은 남자입니다
switch문의 안좋은 예시
public static void main(String[] args) {
char grade=' ';
System.out.print("당신의 점수를 입력하세요 (1~100) : ");
Scanner scanner = new Scanner(System.in);
int score = scanner.nextInt();
switch(score) {
case 100: case 99: case 98: case 97: case 96:
case 95: case 94: case 93: case 92: case 91: case 90:
grade = 'A';
break;
case 89: case 88: case 87: case 86: case 85:
case 84: case 83: case 82: case 81: case 80:
grade = 'B';
break;
case 79: case 78: case 77: case 76: case 75:
case 74: case 73: case 72: case 71: case 70:
grade = 'C';
break;
default :
grade = 'F';
}
System.out.println("당신의 학점은 "+grade+"입니다.");
}
//결과
당신의 점수를 입력하세요 (1~100) : 98
당신의 학점은 A입니다.
switch문은 조건식을 1번만 계산하면 되기에 if문보다 빠른 것은 사실이다 하지만, 위의 경우 case문이 너무 많아져서 좋지 않은 코드가 된다. 따라서 조건식을 원하는 값으로 변환을 시켜주는 작업은 필수적이다.
조건식을 계산
public static void main(String[] args) {
int score = 0;
char grade = ' ';
System.out.println("당신의 점수를 입력해주세요 (1~100) : ");
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine();
score = Integer.parseInt(tmp);
switch(score/10) {
case 10:
case 9:
grade ='A';
break;
case 8:
grade ='B';
break;
case 7:
grade='C';
break;
default :
grade='F';
}
}
//결과
당신의 점수를 입력해주세요 (1~100) : 95
당신의 학점은 A입니다.
중첩 switch문
public static void main(String[] args) {
System.out.print("당신의 주민번호를 입력해주세요 : ");
Scanner scanner = new Scanner(System.in);
String regNo = scanner.nextLine();
char gender = regNo.charAt(7);
switch(gender) {
case '1': case'3':
switch(gender) {
case '1':
System.out.println("당신은 2000년도 이전에 출생한 남자입니다.");
break;
case '3':
System.out.println("당신은 2000년도 이후에 출생한 여자입니다.");
break;
}
break;
case '2': case'4':
switch(gender) {
case '2':
System.out.println("당신은 2000년도 이전에 출생한 남자입니다.");
break;
case '4':
System.out.println("당신은 2000년도 이후에 출생한 여자입니다.");
break;
}
break;
default:
System.out.println("유효하지 않은 주민등록번호 입니다.");
}
}
//결과
당신의 주민번호를 입력해주세요 : 980925-1234567
당신은 2000년도 이전에 출생한 남자입니다.
출처 : JAVA의 정석 - (남궁성지음)