[JAVA] InputMismatchException 에러 발생

2024. 1. 3. 17:07언어(Language)/JAVA

package scanner;

import java.util.Scanner;

public class ScannerWhileEx1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while(true) {
            System.out.print("이름을 입력하시오 (종료를 입력하면 종료): ");
            String name = scanner.nextLine();
            if(name.equals("종료")) {
                System.out.println("프로그램을 종료합니다.");
                break;
            }

            System.out.print("나이를 입력하세요: ");
            int age = scanner.nextInt();

            System.out.println("입력한 이름: " + name + ", 나이: " + age);
        }
    }
}

 

 

위의 코드를 실행한 후 "종료"를 입력하였더니

 

이러한 에러가 발생하였다.

 

 

 

또한 정상적으로 이름과 나이를 입력하였을 경우 위의 사진과 같이 두 번째 실행에서 이름 부분에 이미 엔터로 입력이 된 것을 볼 수 있다.

 

그 이유는 nextLine()이 line을 읽어오는 것과 다르게, nextInt()는 숫자만 읽어온다.

따라서 우리가 30을 입력하고 엔터를 치면 30\n이 입력이 되는 것이다.

하지만 nextInt()는 30만 가져가게 되고, 남는 엔터는 다음 nextLine()이 가져가게 된다.

따라서 위와 같은 상황이 발생하게 되는 것이다.

 

이와 같은 상황을 해결하기 위하여 scanner.nextLine();을 추가하여 엔터를 읽고 버릴 수 있도록 해주었다.

 

 

[수정한 코드]

package scanner;

import java.util.Scanner;

public class ScannerWhileEx1 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while(true) {
            System.out.print("이름을 입력하시오 (종료를 입력하면 종료): ");
            String name = scanner.nextLine();
            if(name.equals("종료")) {
                System.out.println("프로그램을 종료합니다.");
                break;
            }

            System.out.print("나이를 입력하세요: ");
            int age = scanner.nextInt();
            scanner.nextLine();

            System.out.println("입력한 이름: " + name + ", 나이: " + age);
        }
    }
}