반응형
[Java] 8. switch문
switch문은 다양한 처리문을 두고 조건값에 의해 하나에서 여러개의 처리문을 한 번에 실행하는데 유용한 분기문이다.
if문이 boolean(true 또는 false)인 반면 switch문은 정수형(byte, short, int)과 문자형(char, string)이고, long형이나 공백이 포함된 문자열, boolean과 실수형은 사용할 수 없다.
switch문은 식과 case문의 값을 비교해서 일치하면 해당 case문의 실행문장을 실행하고 그렇지 않다면(일치하는 것이 없다면) default문을 실행한다.
break를 만나면 switch문을 벗어난다.
다음은 switch문이 갖는 구조를 나타낸 것이다.
switch(인자값) { case 조건값1: //세미콜론(;)이 아니라 콜론(:)이다! 실행문장; break; case 조건값2: //break문은 보통 하나의 조건문마다 넣어주고, 없으면 다음 break문을 만날 때까지 실행문장; break; //모든 실행문장 처리 case 조건값3: 실행문장; break; default: 실행문장; |
다음의 예는 광물을 입력하면 그 광물의 특징을 출력하는 프로그램이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
package mymain;
import java.util.Scanner;
public class _2_switch문1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
String mine;//광물이름
String result;
System.out.print("광물 이름을 입력하시오(금(Au), 은(Ag), 동(Cu), 철(Fe), 한글로 입력할 것!):");
mine=scan.next();
switch(mine) {
case "금": result="값비싸고 가치있는 광물이지!"; break;
case "은": result="은빛 광물"; break;
case "동": result="구릿빛 광물"; break;
case "철": result="철은 단단한 광물"; break;
default: result="어떤 광물일까요?";
}
System.out.printf("%s은 %s", mine, result);
}
}
|
cs |
case문에는 각각 금, 은, 동, 철 네 가지의 광물들이 설정되어있고, 이들 중 하나를 입력하면 result에 입력된 각 광물들의 특징들이 출력된다. 만약 이 네 개의 광물 이외의 것을 입력하면 default문에 있는 "어떤 광물일까요?"가 출력된다.
다음은 이 프로그램을 실행시킨 결과이다.
광물 이름을 입력하시오(금(Au), 은(Ag), 동(Cu), 철(Fe), 한글로 입력할 것!):금 금은 값비싸고 가치있는 광물이지! |
광물 이름을 입력하시오(금(Au), 은(Ag), 동(Cu), 철(Fe), 한글로 입력할 것!):1 1은 어떤 광물일까요? |
금을 입력한 결과, mine은 "금", result는 "값비싸고 가치있는 광물이지!"로 설정되고, break문이 실행되 switch문을 빠져나왔다. 그 밑에 있는 System.out.printf에서 mine과 result가 출력된다.
1을 입력한 결과, 1은 case문 어디에도 없어서 default문에 있는 "어떤 광물일까요?"가 result로 설정되어 출력된다.
다음은 점수에 따라 미적분학 성적을 부여하는 프로그램이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
package mymain;
import java.util.Scanner;
public class _2_switch문2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan=new Scanner(System.in);
int math;
String grade;
System.out.print("미적분학 성적:");
math=scan.nextInt();
//유효성 체크
if(math>=0 && math<=100) {
//정상코드
switch(math/10)
{
case 10:
case 9: grade="A";break;
case 8: grade="B";break;
case 7: grade="C";break;
case 6: grade="D";break;
default: grade="F";
}
System.out.printf("미적분학 %d점 등급은 %s입니다.\n", math, grade);
}else {
//비정상코드
System.out.println("점수는 0~100사이값만 입력하시오.");
}
}
}
|
cs |
특징이라면 switch문이 if문 안에 있다는 것이다. 여기서 if문은 제대로 입력했는가를 체크하기 위해 있는 것이다.
다음은 위 프로그램을 실행시킨 결과다.
미적분학 성적:100 미적분학 100점 등급은 A입니다. |
미적분학 성적:40 미적분학 40점 등급은 F입니다. |
앞에서 break문이 없으면 break문을 만날 때까지 실행문장을 실행한다고 했다. case문에서 10일 때 아무것도 작성되어있지 않아서 9일 때 grade를 A로 지정하라는 명령을 수행하고 break되었고, 그 결과 A가 출력되었다.
10부터 6까지는 case문 다음으로 실행명령이 있으나 5 이하로는 없다. default로 F가 설정되어 있고, 40일 때 10으로 나눈 나머지는 4이고, 어느 case문에도 4가 없기 때문에 default인 F가 출력되었다.
다음은 윤년을 고려하지 않고 월별 일수를 출력하는 프로그램이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
package mymain;
import java.util.Scanner;
public class _2_switch문3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
int month;
int last_day; // 월의 마지막 날
System.out.printf("월을 입력하시오(그 월의 일(日) 수 출력):");
month = scan.nextInt();
//월(月) 1 2 3 4 5 6 7 8 9 10 11 12
//일(日)수: 31 28 31 30 31 30 31 31 30 31 30 31
/*
* if(month==1) last_day=31; else if(month==2) last_day=28; else if(month==3)
* last_day=31;
* 자동정렬: Ctrl+Shift+F
*/
if (month >= 1 && month <= 12) {
switch (month) {
case 2:last_day = 28;break;
case 4:
case 6:
case 9:
case 11:last_day = 30;break;
default:last_day = 31;
}
System.out.printf("%d월은 %d일까지 있다.\n", month, last_day);
} else {
System.out.println("month는 1~12월 입력하세요.\n,");
}
}
}
|
cs |
월별 일수는 위 코드의 주석부분에 있다.
case문에서 4, 6, 9 부분은 비어있고, 11 부분에 last_day=30으로 설정하고 break로 되어있다. 이것은 4, 6, 9, 11을 입력하면 그 결과는 last_day=30이 된다는 뜻이다.
이 프로그램을 실행하면 다음과 같은 결과를 얻는다.
월을 입력하시오(그 월의 일(日) 수 출력):6 6월은 30일까지 있다. |
월을 입력하시오(그 월의 일(日) 수 출력):12 12월은 31일까지 있다. |
반응형
'Coding(Java) > Java(이론)' 카테고리의 다른 글
[Java] 10.while문 (0) | 2021.08.25 |
---|---|
[Java] 9. for문 (0) | 2021.08.24 |
[Java] 7. if문 (0) | 2021.08.23 |
[Java] 6. 시프트, 관계, 이진논리, 일반논리, 3항, 대입연산자 (0) | 2021.08.20 |
[Java] 5. 단항연산자, 산술연산자 (0) | 2021.08.20 |