학원/JAVA

9.19 4-4일 차 SwitchStatement

도원결의 2022. 9. 19. 20:23

SwitchStatement

switch문 : if문처럼 조건에 따라서 분기하는 제어문
형식:

  정수식(산술식): 연산의 결과값이 byte/short/char/int/String/Enum타입으로 나오는 식 long형은 해당 안됨.          
                           정수식은 산술식이거나 직접 변수를 정수식으로 사용
                          ex) num % 5 혹은 num         
               
  switch(정수식){  
    case 값1 :
                     명령문1;
        break;
    case 값2 :
                    명령문2;
        break;

    ....
    case 값n :
                      명령문n;
        break;
   
    [default :
      명령문m;
      [break;]
    ]
  }      
    
  break문을 만나면 switch문 밖으로 빠져 나옴. 범위를 가지고 분기할때는 주로 if문을 사용, 수식의 결과값이 이산적일때 switch문 사용 (숫자로 딱 떨어질 때)

 

**scanner 는 자바 5버전 이상부터 지원함! import 해 줘야 한다**

Scanner sc=new Scanner(System.in);
System.out.println("숫자를 입력하세요?");
int inputNumber = sc.nextInt();
System.out.println("입력한숫자:"+inputNumber);

System.out.println("[if문으로 나머지값 판단]");
int remain = inputNumber % 3;
if (remain == 0) System.out.println("나머지는 0");
else if (remain ==1) System.out.println("나머지는 1");
else System.out.println("나머지는 2");

System.out.println("[switch문으로 나머지값 판단]");
switch (remain) {
case 0:System.out.println("나머지는 0"); break;
case 1:System.out.println("나머지는 1"); break;
default:System.out.println("나머지는 2");

//계산기 만들기
System.out.println("첫번째 숫자 입력?");
int fnum = sc.nextInt();
System.out.println("연산자 기호 입력(+,-,*,/) 입력?");
char op = (char)System.in.read();     // 두번째 import!!!!!!!!!!!
System.out.println("두번째 숫자 입력?");
int snum = sc.nextInt();

System.out.printf("첫번째 숫자:%d,기호:%c,두번째 숫자:%d%n",fnum,op,snum);

switch(op) { case '+': System.out.printf("%d + %d = %d%n",fnum,snum,fnum+snum); break;

                    case '-': System.out.printf("%d - %d = %d%n",fnum,snum,fnum-snum); break;

case '*': System.out.printf("%d x %d = %d%n",fnum,snum,fnum*snum); break;

                    case '/': System.out.printf("%d ÷ %d = %d%n",fnum,snum,fnum/snum); break;

                    default: System.out.println("잘못된 연산자 기호입니다");

                  }

 

System.out.println("수강하려는 과목은?");

sc.nextLine(); String subject = sc.nextLine();

switch(subject) { case "국어":System.out.println("과목은 국어");break;

                           case "수학":System.out.println("과목은 수학");break;

                           default:System.out.println("개설되지 않은 과목입니다");

                            }

 


여러 case를 동시에 처리할때는 case 값1:

case 값2:

                                                      case 값n: 실행문  n; break;

                                                     값1인경우,값2인경우, 값n인경우에도 위의 실행문n이 실행됨.

 

switch(inputNumber) { case 1:

                                     case 2:

                                     case 100:

                                     case 200: System.out.println("1이거나 2거나 100이거나 200중 하나"); break;

                                     case 300: System.out.println("300입니다");

                                      }

 

System.out.println("국어 점수 입력?");

 int kor = sc.nextInt(); System.out.println("영어 점수 입력?");

 int eng = sc.nextInt(); System.out.println("수학 점수 입력?");

 int math = sc.nextInt(); System.out.printf("국어:%d,영어:%d,수학:%d%n",kor,eng,math);

 

문]평균을 구해서

90점이상 "A학점"출력           

80점이상 "B학점"출력           

70점이상 "C학점"출력           

60점이상 "D학점"출력           

60점미만 "F학점"을 출력하여라           

단,switch문 사용

 

 

int avg = (kor+eng+math)/30;
// int iniavg = avg/10; 애초에 30으로 나누면 이건없어도 됨
switch (avg) {
case (10):
case (9):System.out.println("A학점"); break;
case (8):System.out.println("B학점"); break;
case (7):System.out.println("C학점"); break;
case (6):System.out.println("D학점"); break;
default:System.out.println("F학점");