HOWTO · Java
Java에서 스캐너를 사용하는 동안 이러한 요소 예외 없음
이 자습서는 Java에서 스캐너를 사용하는 동안 No Such Element Exception 오류를 해결하는 방법을 보여줍니다.
이 페이지의 내용
이 튜토리얼은 Java에서 스캐너를 사용하는 동안 NoSuchElementException 오류를 해결하는 방법을 보여줍니다.
Java에서 스캐너를 사용하는 동안 이러한 요소 예외 없음
Scanner 클래스는 Java 프로그램에서 사용자 입력을 얻는 데 사용됩니다. next(), nextInt() 등과 같은 여러 유틸리티 메서드를 사용합니다.
이러한 메서드로 작업할 때 스캐너는 Java에서 NoSuchElementException 오류를 발생시킬 수 있습니다. 이러한 예외에 대한 이유는 다음과 같습니다.
-
사용자 입력을 받기 위한 두 개의 스캐너 개체가 있다고 가정합니다. 하나의 스캐너를 닫고 다른 스캐너에서 입력을 받으면
NoSuchElementExcpetion이 발생합니다. 하나의 스캐너를 닫으면 입력 스트림이 닫히기 때문입니다. 이것이close()메소드가System.in입력 스트림을 닫기 때문에 다른 스캐너가 동일한 입력 스트림에서 읽을 수 없는 이유입니다.다음은 예입니다.
package delftstack; import java.util.*; public class Example { public static void main(String args[]) { String DemoString = "Hello, This is delftstack.com"; Scanner DemoScanner1 = new Scanner(System.in); Scanner DemoScanner2 = new Scanner(System.in); DemoScanner1.close(); DemoScanner2.next(); } }위의 코드는
NoSuchElementException을 발생시킵니다. 출력 참조:Exception in thread "main" java.util.NoSuchElementException at java.base/java.util.Scanner.throwFor(Scanner.java:937) at java.base/java.util.Scanner.next(Scanner.java:1478) at delftstack.Example.main(Example.java:13)이 문제를 해결하기 위해 하나의 스캐너만 사용할 수 있습니다. 이는 하나의 스캐너가 한 방법에 사용되고 다른 스캐너가 다른 방법에 사용되는 경우에도 적용됩니다.
close()메서드는 모든 입력 스트림을 닫습니다. -
Scanner를 사용하는 동안 라인을 읽고 있는데 읽을 라인이 없으면
NoSuchElementException이 발생합니다. 예를 참조하십시오:package delftstack; import java.util.*; public class Example { public static void main(String args[]) { String DemoString = "Hello, This is delftstack.com"; Scanner DemoScanner1 = new Scanner(DemoString); System.out.println(DemoScanner1.nextLine()); System.out.println(DemoScanner1.nextLine()); } }이 문제를 해결하기 위해
hasNextLine()을 사용하여 스캐너에 다음 줄이 있는지 확인합니다. 스캐너에 다음 줄이 있으면 true를 반환합니다. 그렇지 않으면 false를 반환합니다.예를 참조하십시오:
package delftstack; import java.util.*; public class Example { public static void main(String args[]) { String DemoString = "Hello, This is delftstack.com"; Scanner DemoScanner1 = new Scanner(DemoString); while (DemoScanner1.hasNextLine()) { System.out.println(DemoScanner1.nextLine()); } } }이 코드의 출력은 다음과 같습니다.
Hello, This is delftstack.com