[Java] 자바의 정석

[Java] 자바의 정석 / chap8) 예외처리 - 연습문제

sweetychocoding 2023. 9. 15. 09:35
728x90

8-1)

예외처리의 정의 : 프로그램 실행 시 발생할 수 있는 예기치 못한 예외의 발생에 대비한 코드를 작성하는 것, 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류

예외처리의 목적 : 예외의 발생으로 인한 실행 중인 프로그램의 갑작스런 비정상 종료를 막고, 정상적인 실행상태를 유지할 수 있도록 하는 것

 

 

8-2)

4

 

 

8-3)

4, 5

 

 

8-4)

1-3-5-1-2-5-6

 

 

8-5)

3-5

 

 

8-6)

1

=> 나는 System.exit를 할 경우 해당 메서드 호출만을 종료하는 지 알고 1-1-2-5-6이 출력될 줄 알았는데..

프로그램 자체를 종료하는 메서드였다. 따라서 1만을 출력한다.

 

 

8-7)

package example01;

import java.util.*;

public class Ex05_Chapter7 {

	public static void main(String[] args) {
		int answer = (int) (Math.random() * 100) + 1;
		int input = 0;
		int count = 0;

		do {
			count++;

			try {
				System.out.print("1과 100 사이의 값을 입력하세요 > ");

				input = new Scanner(System.in).nextInt();

				if (answer > input) {
					System.out.println("더 큰 수를 입력하세요.");
				} else if (answer < input) {
					System.out.println("더 작은 수를 입력하세요.");
				} else {
					System.out.println("맞췄습니다.");
					System.out.println("시도 횟수는 " + count + "번 입니다.");
					break;
				}
			} catch (Exception e) {
				System.out.println("유효하지 않은 값입니다. 다시 값을 입력해주세요.");
			}
		} while (true);
	}

}

나 같은 경우에는 try문 안에 정답이나 정답보다 작거나 큰 값을 입력했을 때 출력하는 출력문까지 넣었는데

답지를 보니 try문에는 오직 숫자를 입력 받는 코드만 있었다.. 흐흐

생각을 해보니 그게 맞는 거 같다.

왜냐면 우리가 예외처리 해줘야 되는 것은 숫자가 아닌 문자를 입력했을 경우이기 때문이다.

 

수정된 코드는 다음과 같다.

package example01;

import java.util.*;

public class Ex05_Chapter7 {

	public static void main(String[] args) {
		int answer = (int) (Math.random() * 100) + 1;
		int input = 0;
		int count = 0;

		do {
			count++;
			System.out.print("1과 100 사이의 값을 입력하세요 > ");
			try {
				input = new Scanner(System.in).nextInt();
			} catch (Exception e) {
				System.out.println("유효하지 않은 값입니다. 다시 값을 입력해주세요.");
				continue;
			}

			if (answer > input) {
				System.out.println("더 큰 수를 입력하세요.");
			} else if (answer < input) {
				System.out.println("더 작은 수를 입력하세요.");
			} else {
				System.out.println("맞췄습니다.");
				System.out.println("시도 횟수는 " + count + "번 입니다.");
				break;
			}
		} while (true);
	}

}

 

 

8-8)

2-4-7

728x90