이유없는 NoSuchElementException

조회수 1966회
import java.util.Scanner;

public class HelloWorld{
  public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    int a = sc.nextInt();
    System.out.println(a);
  }
}

간단한 프로그램을 만들다가 갑자기 예외가 생겨서 질문합니다.

프로그램에서 예외가 발생하였는데 Unit test를 진행하던 중에 기어이 여기까지 왔습니다.(기존의 코드에서는 예외처리를 해주었는데도 불구하고 다음과 같은 예외가 계속하여 발생했습니다.)

Exception in thread "main" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1485)
    at java.util.Scanner.nextInt(Scanner.java:2117)
    at java.util.Scanner.nextInt(Scanner.java:2076)
    at HelloWorld.main(HelloWorld.java:6)

javadoc 문서에 따르면 이 예외는 다음 과 같은 상황에 발생한다고 합니다.

NoSuchElementException - if input is exhausted

해석해보면 입력값이 모두 소진되었다는 뜻인데 정확한 뜻을 파악하지는 못하겠습니다.

인터넷에서 예외에 대해 계속 알아보는 중이지만 대부분의 경우 Scanner object를 선언하지 않거나 잘못된 방식으로 선언(예를 들어 Scanner sc = new Scanner(file.int)과 같은 형식으로 선언하고 nextint()함수를 사용한다건다 하는식)했을때 대부분 문제가 생겼지만, 다음과 같은 케이스는 본적이 없습니다. StackOverflow에 검색해 봤을때는 다행히도 본 예외를 대체할 코드를 얻었지만, 문제는 이 예외가 발생하는 이유를 도통 모르겠습니다.

해당 코드의 문제가 무엇인지 알려주시면 매우 감사하겠습니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 오류 재현이 가능한 코드를 올려주세요. 정영훈 2019.12.3 04:04
  • 저 코드가 전부입니다. 저녀석을 실행하면 질문한 해당 예외가 생깁니다. 알 수 없는 사용자 2019.12.4 19:23

1 답변

  • 별 문제 없는 것 같습니다.

    [allinux@lghnh ~]$ cat /etc/fedora-release
    Fedora release 29 (Twenty Nine)
    
    [allinux@lghnh ~]$ cat HelloWorld.java
    import java.util.Scanner;
    
    public class HelloWorld{
      public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        System.out.println(a);
      }
    }
    [allinux@lghnh ~]$ javac HelloWorld.java
    [allinux@lghnh ~]$ java HelloWorld
    1
    1
    [allinux@lghnh ~]$ java -version
    openjdk version "1.8.0_192"
    OpenJDK Runtime Environment (Zulu 8.33.0.1-linux64) (build 1.8.0_192-b01)
    OpenJDK 64-Bit Server VM (Zulu 8.33.0.1-linux64) (build 25.192-b01, mixed mode)
    
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)