꾸양!
일단 시작.
꾸양!
💁‍♀️ 깃허브 링크
전체 방문자
오늘
어제
  • 분류 전체보기 (112)
    • STUDY (85)
      • JAVA (36)
      • Algorithm (1)
      • SpringBoot (9)
      • SQL (4)
      • GIT (16)
      • Front (1)
      • JPA (9)
      • Trouble Shooting (9)
    • SPARTA Project (26)
      • WIL (14)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 인프런
  • 클린코드
  • 랠릿
  • 인프콘2024
  • 코드효율성
  • Repository
  • intellij
  • 잔디돌려줘
  • 트러블슈팅
  • 숫자짝꿍
  • 프로그래머스

최근 댓글

최근 글

hELLO · Designed By 정상우.
꾸양!

일단 시작.

STUDY/JAVA

[TIL] < 자바의 정석 > 예제 HighLow - 예외처리해보기

2023. 6. 15. 09:13

오늘은 <자바의 정석> 예제 부분을 다 공부 했으므로 거의 마지막이었던 HighLow 문제 예외처리해보기를 기록해보려고 한다.


< 자바의 정석 > 예제 8-7. 다음은 1~100사이의 숫자를 맞추는 게임을 실행하던 도중에 숫자가 아닌 영문자를 넣어서 발생한 예외이다. 예외처리를 해서 숫자가 아닌 값을 입력했을 때는 다시 입력을 받도록 보완하라.

1과 100사이의 값을 입력하세요 :50
더 작은 수를 입력하세요
1과 100사이의 값을 입력하세요 :asdf
Exception in thread "main" java.util.InputMismatchException
	at java.base/java.util.Scanner.throwFor(Scanner.java:939)
	at java.base/java.util.Scanner.next(Scanner.java:1594)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
	at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
	at StandardOfJava.ExceptionStudy.HighLow.main(HighLow.java:15)
public class HighLow {
    public static void main( String[] args ) {
        // 1~100사이의 임의의 값을 얻어서 answer에 저장한다.
        int answer = (int) ( Math.random() * 100 ) + 1;
        int input = 0;      // 사용자입력을 저장할 공간
        int count = 0;      // 시도횟수를 세기 위한 변수
        do {
            count++;
            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; // do-while문을 벗어난다.
            }
        } while ( true ); // 무한반복문

    }
}

1. 처리해줘야 할 예외 : InputMismatchException

2. try-catch-finally를 다시 생각해 보자. 이걸 해보고 하다가 오류가 나면 catch에서 잡아.

3. 그럼 오류가 날 수 있는 부분을 try로 감싸준다. 여기서는 input 값에 들어오는 값이 int가 아닐 때 오류가 날 수 있으므로 그 부분을 감싸준다. -> 일단 실행!

try {
	input = new Scanner( System.in ).nextInt();
} catch ( InputMismatchException ime ) {
	System.out.println( "잘못된 값을 입력하셨습니다. 다시 입력해 주세요." );
}
1과 100사이의 값을 입력하세요 : 50
더 작은 수를 입력하세요.
1과 100사이의 값을 입력하세요 : asdf
잘못된 값을 입력하셨습니다. 다시 입력해 주세요.
더 작은 수를 입력하세요.
1과 100사이의 값을 입력하세요 :

잘못된 값을 입력하셨습니다. 다시 입력해 주세요. 다음에 1과 100 사이의 값을 입력하세요. 가 나와야 한다.

이 경우에는 그 전에 들어가 있던 input값이 내려가면서 answer < input 에 걸렸기 때문에 더 작은 수를 입력하세요. 부분이 출력되는 것이다. 즉, 다음 while문을 실행해야 한다.

catch문에서 continue;를 추가해준다.


try {
	input = new Scanner( System.in ).nextInt();
} catch ( InputMismatchException ime ) {
	System.out.println( "잘못된 값을 입력하셨습니다. 다시 입력해 주세요." );
	continue;
}


잘 보완되었음을 알 수 있다! 호텔 예약 프로그램, 키오스크 프로그램, 메모 프로그램 등등 이번에 한 프로젝트 대부분이 Scanner로 값을 받아와서 콘솔에 출력하면서 프로그램을 구현했는데, 대부분 다 예외처리를 하지 않았다. 이번에 배운 예외처리를 프로젝트에 적용시켜 리팩토링 하면 더 완성도 있는 프로그램을 만들 수 있을 것 같다. 시간이 나면 한 번 리팩토링 해보는 걸로! 다른 캠퍼분들보다 진도가 너무 느린 거 같지만 나는 나만의 길을 가면 된다! 어제의 나보다 오늘의 나가 더 잘하니까 괜찮아! 

저작자표시

'STUDY > JAVA' 카테고리의 다른 글

[TIL] 예외 되던지기(Exception re-throwing)는 언제 사용될까?  (0) 2023.06.21
[TIL] ConcurrentModificationException  (0) 2023.06.20
[TIL] printStackTrace()는 왜 아래에 찍힐까?  (0) 2023.06.14
[TIL] Getter와 Setter. 왜 쓸까?  (1) 2023.06.12
[TIL] 프로그래머스 - 최댓값과 최솟값 ( 느려지게 하는 범인 찾기 )  (0) 2023.06.11
    'STUDY/JAVA' 카테고리의 다른 글
    • [TIL] 예외 되던지기(Exception re-throwing)는 언제 사용될까?
    • [TIL] ConcurrentModificationException
    • [TIL] printStackTrace()는 왜 아래에 찍힐까?
    • [TIL] Getter와 Setter. 왜 쓸까?
    꾸양!
    꾸양!
    차근차근 한 발자국씩.

    티스토리툴바