개발/Java

[Java] switch_case, switch 문

suniverse 2023. 1. 2. 23:24

switch문

  • if문과 유사하게 조건에 따른 실행 문장을 달리하는 조건문이다. 
  • if문과 달리 조건식에 정수값, 문자열, Enum 상수 중 하나의 결과가 와야한다. 
  • case문에는 조건식 판별 결과와 비교할 값을 사용하며, 범위 지정이 불가능하다. 값만 사용가능하다.
  • 조건식 결과와 일치하는 case문의 : (콜론)뒤에 있는 문장들을 차례대로 실행한다. 
  • case문의 값은 중복될 수 없으며, 순서는 상관없다. 
  • break문은 각 case문의 영역을 구분하는 역할을 한다. 그렇기 때문에, 각 case문의 마지막에 break문을 적지 않는 실수를 하면 안 된다. 
  • case문 실행 후 break문을 사용하여 swith ~ case문을 빠져나갈 수 있으며, break문이 없을 경우에는 조건과 상관없이 다른 case문 또는 default문을 모두 실행한다. (break문을 만나거나 switch~case문이 끝날때 까지 실행) 

 

<기본 문법> 

switch(판별 변수) {

           case 값1 :

           // 판별 변수가 값1과 일치할 경우 실행할 문장들...

           break;

           case 값2 : 

           // 판별 변수가 값2와 일치할 경우 실행할 문장들...

           break;

           default: // 일치하는 case문이 없을 경우 실행할 문장들....

}

 

 

ex) 학생 점수 (score)에 대한 학점(grade) 판별

A학점: 90 ~ 100점

B학점: 80 ~ 89점

C학점: 70 ~ 79점

D학점: 60 ~ 69점

F학점: 0 ~ 59점

그외: 점수 입력 오류 

(단, score에는 int형에 저장될 수 있는 범위의 데이터가 저장된다고 가정한다.)

"x학점" 이라고 출력하기

 

✍입력

public class pratice1 {

	public static void main(String[] args) {
		int score = 70;
		String grade = "";
		if(score >= 0 && score <= 100) {
			switch(score/10) {
			case 9 :
				grade = "A";
				break;
			case 8 :
				grade = "B";
				break;
			case 7 :
				grade = "C";
				break;
			case 6:
				grade = "D";
				break;
			default:
				grade = "F";
			}
			grade += "학점";
			System.out.println(grade);
					
		} else {
			System.out.println("점수 입력 오류");
		}
	}

}
  • if문과 switch문을 중복 사용하였다. 먼저 if문에서 score의 범위를 지정하였다. 
  • if문의 조건 0 <= score <= 100을 벗어나는 음수 또는 100이상의 값을 입력하면 "점수 입력 오류"가 출력되도록 했다
  • 각 학점별 점수의 공통점을 찾아냈다. A학점은 90점대, B학점은 80점대, C학점은 70점대....... 그래서 swtich 판별 변수로 score를 10으로 나눈 값을 사용하였다. 

💻입력

 

70 입력

          70 입력                                                                                        101 입력

 

 

ex) 세 정수 n1, n2, n3 중 최대값 출력. 최대값: 30

✍입력

public class pratice1 {

	public static void main(String[] args) {
		int n1 = 100, n2 = 50, n3 = 500;
		String result = "최대값 : ";
		if(n1>n2) {
			if(n1>n3) {
				result += n1;
			} else {
				result += n3;
			}
		} else if (n2>n3) {
			result += n2;
		} else {
			result += n3;
		}
		System.out.println(result);
	}

}
  • 중첩 if문을 사용하였다. 
  • 우선 n1과 n2를 먼저 비교한다. n1이 n2보다 크다고 가정을 해보자. (이때 최대값은 n1이 된다) 여기서 다시 n1과 n3을 한 번 더 비교한다. n1이 크다면 최대값은 n1이 될 것이고, 그게 아니라면 최대값은 n3이 될 것이다. 
  • 첫번째 if문에서 n1이 n2보다 작다고 판단되는 경우 else if문의 (n2>n3)이 실행된다. 이때 n2가 더 크다면 최대값은 n2가 된다. 그게 아니라면 else문이 실행되면서 최대값은 n3이 된다. 

💻출력

 

✍입력(삼항연산자 사용)

public class pratice1 {

	public static void main(String[] args) {
		int n1 = 100, n2 = 200, n3 = 70;
		int max = (n1>n2) ? n1 : n2;
        		max = (max>n3) ? max : n3;
		    System.out.println("최대값 : " + max);
	}

}
  •  

💻출력