안녕하세요.
#yeoneeblog 여니입니다 :)
switch문은 if문과 동일한 조건문중에 하나입니다.
<switch문과 if문의 차이점>
if(조건식) 은 조건식을 복잡하게 기술이 가능합니다. 비교범위(대소비교)를 제시할수 있습니다.
switch는 조건식이 불가능합니다. 확실한 값만 조건으로 기술할수 있습니다.
이 값을가지고 '동등비교'만 수행합니다.
<switch문 표현법>
[표현법]
switch(동등비교를 수행할 값) {
case 값1 : 실행할 코드1; // 앞으로 동등비교를할 대상자 == 값1 일경우 실행할코드1을 실행합니다.
break; // 실행할코드1을 실행하고 switch문을 빠져나갈수 있게 'break;'를 걸어줍니다.
// 브레이크문이 없다면 아래내용이 순차적으로 실행됩니다.
case 값2 : 실행할 코드2;
break;
case 값n : 실행할 코드n;
break;
default : 실행할 코드; // if - else if문에서 else문과 같은 역할을 합니다.
// 위의 값1, 값2, ... 값n까지 앞으로 동등비교를할 대상자와 일치하지 않다면
// default 내의 실행할코드가 실행된다.
// 마지막은 break문을 작성하지 않음.
}
<switch문의 활용>
public void method1() {
// 1-3사이의 정수값을 입력받아
// 1인경우 "빨간불입니다" 출력
// 2인경우 "파란불입니다" 출력
// 3인경우 "초록불입니다" 출력
// 잘못 입력한경우 "잘못 입력하셨습니다."
자, 가장 기본인 swich활용부터 해볼까요?
위의 내용을 swich문으로 식을 만들어 출력하고자 합니다.
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
// if(num == 1) {
// System.out.println("빨간불");
// }
// else if(num == 2) {
// System.out.println("파란불");
// }
// else if(num == 3) {
// System.out.println("초록불");
// }
// else {System.out.println("잘못 입력하셨습니다.");
// }
switch (num) { // num과 아래 case에 들어가는 1자리의 값이 같아야함 (문자면 문자, 정수면 정수)
case 1:
System.out.println("빨간불");
break;
case 2:
System.out.println("파란불");
break;
case 3:
System.out.println("초록불");
break;
default:
System.out.println("잘못 입력하셨습니다.");
}
}
=> 즉, 입력자가 '빨간불'을 입력하게 되면 'break;'가 실행되어 case1에서 실행코드가 끝나고, swich문을 빠져나가게 됩니다. 따라서, 입력자가 '파란불','초록불'을 입력한다면, 실행코드 case1, case2, case3이 순차적으로 진행되며 실행코드에 맞는 내용이 입력되면 'break;'가 실행되어 swich문을 빠져나오게 됩니다.
만약, 입력자가 '빨간불' , '파란불' , '초록불' 셋 다 아닌 것을 입력하면 'default'로 인해 "잘못 입력하셨습니다." 문구가 출력되게 됩니다.
public void method2() {
// 사용자에게 구매할 과일명을 입력받아 각 과일마다 가격을 출력하는 프로그램 만들기
// 사과(1000원), 바나나(2000원), 복숭아(5000원)
// xx의 가격은 xxxx원입니다.
// 판매하지 않는 과일의 경우 "저희 가게에서 판매하는 과일이 아닙니다"
Scanner sc = new Scanner(System.in);
System.out.println("구매할 과일 목록(사과, 바나나, 복숭아) ");
System.out.print("구매할 과일 입력 : ");
;
String frt = sc.nextLine();
int price = 0;
switch (frt) {
case "사과":
price = 1000;
break;
case "바나나":
price = 2000;
break;
case "복숭아":
System.out.printf("%s의 가격은 5000원입니다", frt);
break;
default:
System.out.println("저희 가게에서 판매하는 과일이 아닙니다.");
return; // 잘못 입력했을 경우에 아래 출력문이 안나오게끔 return문 필요
}
System.out.printf("%s의 가격은 %d원입니다", frt, price);
}
=> method1번과 같은 원리로 문자를 입력하는 방식으로 식이 만들어졌습니다.
추가된 점은 잘못 입력하였을 경우 가장 아래의 System.out.printf("%s의 가격은 %d원입니다", frt, price); 출력문이 실행되지 않도록 'return;'을 입력해주었습니다. return문을 통해 실행코드는 다시 상위로 올라가게 되고 입력자에게 새로운 입력을 요구하게 됩니다.
public void method3() {
// 사용자에게 등급별로 권한을 부여하는 프로그램
// 1등급 : 관리권한, 글쓰기 권한, 읽기 권한
// 2등급 : 글쓰기 권한, 읽기 권한
// 3등급 : 읽기 권한
Scanner sc = new Scanner(System.in);
System.out.print("등급을 입력해주세요 : ");
int level = sc.nextInt();
// break문 없이 switch 작성하는 케이스가 종종있음
switch (level) {
case 1:
System.out.print("관리 권한 소유 ");
case 2:
System.out.print("글쓰기 권한 소유");
case 3:
System.out.print("읽기 권한 소유");
}
}
=> 종종 'break' 없이 swich문을 작성하는 경우도 종종 있습니다.
public void method4() {
// 사용자에게 1월 ~ 12월 사이의 월을 입력받아 해당 달의 마지막 날짜를 출력하는 프로그램
// 1, 3, 5, 7, 8, 10, 12 -> 해당 달은 31일까지 입니다
// 4, 6, 9, 11 -> 해당 달은 30일까지 입니다
// 2 -> 해당 달은 28일 혹은 29일까지 입니다
// 그외 => 1월부터 12월까의 숫자를 입력해주세요
// swtich문으로 만들기, break문은 딱 3개만 사용
Scanner sc = new Scanner(System.in);
System.out.print("월을 입력해주세요");
int month = sc.nextInt();
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println("해당 달은 31일까지 입니다");
break;
case 2:
System.out.println("해당 달은 28일 혹은 29일까지 입니다");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println("해당 달은 30일까지 입니다");
break;
default:
System.out.println("잘못 입력하셨습니다");
}
}
=> 실행코드의 결과값이 동일하다면, case를 연달아 작성한 후 출력값을 아래에 입력해줍니다.
나머지 'break' , 'default' 활용은 동일합니다.
<switch문의 장점>
: case에 기록된 값을 통해 내가 원하는 코드위치로 프리패스 가능하다.
* if~else문의 경우 if의 조건식 결과가 true가 나오기전까지 조건식검사를 계속 실행하므로 , switch문보다
* 연산효율이 떨어짐
*
* switch문 자주 사용되지는 않지만, 사용하는경우는 정말 어떤 동일한 연산결과가 수행되어야하는 경우.
* ex) 키보드입력, 마우스입력
'JAVA' 카테고리의 다른 글
[자바/요약정리] 변수와 배열(Array) (0) | 2023.04.11 |
---|---|
JAVA 실습문제. 배열 (0) | 2023.04.09 |
[자바] 조건문 문자열.equals(문자열)(문자열간의 동등비교,기본자료형,참조자료형),조건문 중복 사용(2) (0) | 2023.03.31 |
[자바] 단독if문,if~else문,if ~ else if문,String result(1) (0) | 2023.03.30 |
[자바] 논리연산자 및 유니코드, dead코드 활용법 (0) | 2023.03.30 |