[JAVA]switch문

심심이·2024년 1월 22일
0

java

목록 보기
11/46

switch문의 사용법

  • switch문은 답이 확실할 때 쓰는 것이 좋다(값이 정해져 있을 때)
switch (key) { //()안에 비교할 값 넣음
	case value: //case value값이랑 비교

		break; // break를 만나면 switch문을 빠져나온다.

	default: //case의 경우를 제외한 나머지, 디폴트값
		break; 
}
			

if문과의 비교 1) : 입력값이 특정 값에 해당하면 계산하는 코드



	String operator = sc.nextLine();    
	if("+".equals(operator)) {
				calc_result = num1 + num2;
			} 
			else if("-".equals(operator)) {
				calc_result = num1 - num2;
			} 
			else if("*".equals(operator)) {
				calc_result = num1 * num2;
			} 
			else if("/".equals(operator)) {
				calc_result = (double)num1 / num2;
			} 
			else {
				System.out.println("[경고] 사칙연산 선택은 + - * / 만 입력하세요");
				sc.close();
				return; 
			}

switch문으로 변환 1)

		
			switch (operator) {
			case "+": // operator 값이 "+"와 같다 라면
				calc_result = num1 + num2;
				break;	

			case "-": // operator 값이 "-"와 같다 라면
				calc_result = num1 - num2;
				break;	
				
			case "*": // operator 값이 "*"와 같다 라면
				calc_result = num1 * num2;
				break;	
				
			case "/": // operator 값이 "/"와 같다 라면
				calc_result = (double)num1 / num2;
				break;	
				
			default: // case를 제외한 나머지 경우
				System.out.println("[경고] 사칙연산 선택은 + - * / 만 입력하세요");
				sc.close();
				return;
			}
            
//switch구문에서 break;를 만나면 switch(operator){} 부분을 빠져나간다.
			
			
            

if문과의 비교 2) : 입력값이 특정 값인 경우+ 그 값에서 if문을 사용해서 특정 경우에 따라 값이 또 달라질 경우

			if("/".equals(operator)) { // /의경우
				
				if(num1 % num2 == 0) {
					result = num1 + operator + num2 + "=" + (int)calc_result;
				} 
				 else { // * - + 의경우 
				result = num1 + operator + num2 + "=" + calc_result;
				 } 
			} else {
				result = num1 + operator + num2 + "=" + (int)calc_result;
			}

switch문으로 변경 2)

			
			switch (operator) {
			case "/":
				if(num1 % num2 == 0) {
					result = num1 + operator + num2 + "=" + (int)calc_result;
				} 
				else { // * - + 의경우 
					 result = num1 + operator + num2 + "=" + calc_result;
				 } 
				//switch속에 if를 써도 ok
				break;

			default: // case를 제외한 나머지 경우
				result = num1 + operator + num2 + "=" + (int)calc_result;
				break;
			}
			

(switch 안 if 쓰기 가능함)


<switch문에서 비교대상값을 사용 불가한 경우>

  • switch (n) 에서 n의 자료형에 제약이 있다 : long, float, double 불가능 (그 외 자료형 가능: byte, short, int, char, String)
    -> 실수의 경우 형변환해서 사용 가능 ex) switch((int)n) {} 등 (long타입 제외)

반올림과 switch문



		switch (((byte)average)/10) {  			
			case 10:
			case 9: //((byte)average)/10 값이 10 또는 9라면
				// 90 <= (byte)average <= 100 / 90 91 92 93 94 .. 98 99 / 90/10 = 9 91/10 = 9 99/10 = 9...  100/10 = 10 
				hakjum = 'A';
				break;
			
			case 8: 
				hakjum = 'B'; // ((byte)avg)/10 값이 8이라면
				break;
				
			case 7:
				hakjum = 'C';
				break;
				
			case 6:
				hakjum = 'D';
				break;
			
			default:
				hakjum = 'F';
				break;
		}
		

switch (((byte)average)/10) :
avg를 byte로 형변환 한 다음에 /10하는 것임(순서 헷갈릴 수 있으니 주의) 헷갈릴 수 있으니 괄호처리를 꼭 해준다.
실수->정수로 하면 소수점 절삭되는 것을 주의!


switch문으로 값을 연속해서 쌓아올릴 때


switch문 주의사항>

break가 없을 경우 참인 조건문에서부터 빠져나오지않고 모두 실행된다.

ex. 예시 코드>>


		switch (hakjum) {
            case 'A':
                gift += "놀이공원이용권,"; //할당연산자인데,gift에 문자열 삽입
                                      // gift = ""(초기화값) + "놀이공원이용권," 

            case 'B':
                gift += "치킨,"; // gift = gift + "치킨,"

            case 'C':
                gift += "피자,"; // gift = gift + "피자,"

            case 'D':
                gift += "아이스크림"; // gift = gift + "아이스크림"
                break; //break;를 만나면 switch문 빠져나감

            default:
                gift = "꿀밤3대"; // 초기화
                break;
		} // end of switch(hakjum)=====
		

break;를 case 'd'에 담아서 'A' 의 경우 a~d까지 출력이 된다.

profile
개발하는 심심이

0개의 댓글

관련 채용 정보