관리 메뉴

나구리의 개발공부기록

자바의 정석 기초편 ch4 - 9 ~ 12[switch문, 임의의 정수 만들기] 본문

유튜브 공부/JAVA의 정석 기초편(유튜브)

자바의 정석 기초편 ch4 - 9 ~ 12[switch문, 임의의 정수 만들기]

소소한나구리 2023. 11. 6. 19:30

1) switch문

  • 처리해야하는 경우의 수가 많을 때 유용한 조건문
  • if-else if문과 비슷하지만 더 간단한 코드로 조건문을 작성할 수 있음
  • switch 문은 항상 if-else if문으로 바꿀 수 있지만 if-else if문은 항상 switch문으로 바꿀 수 있는 것은 아님
  • switch의 제약조건에 걸리지 않고 경우의 수가 많은 if-else if문을 switch문으로 변경하는 것을 검토 진행

(1) 동작 방식

  1. 조건식을 계산 -> 정수나 문자열 (true, false가 아님)
  2. 조건식의 결과와 일치하는 case문으로 이동
  3. 문장실행
  4. break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나감
    • break문을 빠트렸을 경우 다른 break문을 만나거나 switch문을 끝까지 실행한 경우 빠져나감
    • break문을 일부로 뺄 수도 있지만 실수로 빠트리는 경우가 훨씬 많음
    • default문은 switch문의 가장 마지막에 위치하는 경우가 많아 break문을 제외함
    • default문은 if-else if문의 else문처럼 생략이 가능
switch (조건식) {
	case 값1 :
    	// 조건식의 결과가 값1과 같을 경우 수행될 문장들
        // ...
        	break; // switch문 아웃
	case 값2 :
    	// 조건식의 결과가 값2과 같을 경우 수행될 문장들
        // ...
        	break; // switch문 아웃
        // ...
	default :
        // 조건식의 결과와 일치하는 case문이 없을 때 수행 될 문장들
        // ...
}

 

(2) switch문의 제약조건

  • switch문의 조건식 결과는 정수 or 문자열(jdk1.7 부터 허용)이어야 함
  • case문의 값은 정수, 상수(문자 포함), 문자열만 가능하며 중복되지 않아야 함 -> 변수가 안됨
public static void main(String[] args) {
	int num, result;
	final int ONE = 1;
		...
	switch(result) {
		case '1': // OK. 문자 리터럴(정수 49와 동일)
		case ONE: // OK. 정수 상수
		case "YES": // OK. 문자열 리터럴. JDK 1.7부터 허용
		case num: // 에러. 변수는 불가
		case 1.0: // 에러. 실수도 불가
			...
    }

 

(3) 예제

import java.util.Scanner;

public class ex4_6 {

	public static void main(String[] args) {
		System.out.print("현재 월을 입력하세요.>");
		
		Scanner scanner = new Scanner(System.in);
		int month = scanner.nextInt(); // 화면을 통해 입력받은 숫자를 month에 저장
		
		switch(month) {
			case 3: case 4:	case 5:
				System.out.println("현재의 계절은 봄입니다.");
				break;
			case 6: case 7: case 8:
				System.out.println("현재의 계절은 여름입니다.");
				break;
			case 9: case 10: case 11:
				System.out.println("현재의 계절은 가을입니다.");
				break;
			case 12: case 1: case 2:
//          default: // default를 사용해도 되지만 case에 해당하지 않는 모든 값이 적용됨
				System.out.println("현재의 계절은 겨울입니다.");
		}
	} //main의끝
}

2) 임의의 정수 만들기(난수) - Math.random()

  • 게임이나 랜덤으로 섞을때 사용
  • Math.random(): 0.0부터 1.0미만의 임의의 double값을 반환
  • 0.0 <= Math.random() < 1.0, (0.0 ~ 0.9999999999....)

(1) 사용 방법

  1. 설정하고자 하는 범위의 값을 곱함 -> 5미만의 값을 랜덤으로 원할 경우 Math.random()*5
  2. 원하는 타입으로 변환 -> 정수를 원할 경우 (Int)(Math.random())
  3. 원하는 값이 나올 수 있도록 + , - 를 사용하여 적용 -> Math.random()*5+1

(2) 예제

public class ex4_7 {
	public static void main(String[] args) {
		
			// 괄호 {} 안의 내용을 20번 반복.
			// Quiz 1) 1~10사이의 난수를 20개 출력
			// 1,2,3,4,5,6,7,8,9,10 = 10개
		
		for(int i = 1; i <= 20; i++) {
//			System.out.println(Math.random()); // 0.0 <= x < 1.0
//			System.out.println(Math.random()*10); // 0.0 <= x < 10.0
//			System.out.println((int)(Math.random()*10)); // 0 <= x < 9
			System.out.println((int)(Math.random()*10)+1); // 1 <= x <= 10
			
			// Quiz 2) -5~5사이의 난수를 20개 출력
			// -5,-4,-3,-2,-1,0,1,2,3,4,5,6 = 11개
			System.out.println((int)(Math.random()*10)-5); // -5 <= x < 6
			
			// Quiz 3) -3~6사이의 난수를 20개 출력
			System.out.println((int)(Math.random()*10)-3);
			
			// Quiz 4) 4~9사이의 난수를 20개 출력
			System.out.println((int)(Math.random()*6)+4);
		}
	}
}

 

 

 

** 출처 : 남궁성의 정석코딩_자바의정석_기초편 유튜브 강의