Java でスキャナを使用しているときに No such Element Exception が発生する
このチュートリアルでは、Java でスキャナーを使用する際の NoSuchElementException
エラーの解決方法を示します。
Java でスキャナを使用しているときに No such Element Exception が発生する
Scanner クラスは、Java プログラムでユーザー入力を取得するために使用されます。 next()
、nextInt()
などのいくつかのユーティリティ メソッドを使用します。
これらのメソッドを使用する場合、スキャナは Java で NoSuchElementException
エラーをスローする可能性があります。 これらの例外の理由は次のとおりです。
-
ユーザー入力を取得するための 2つの Scanner オブジェクトがあるとします。 1つのスキャナーを閉じて、もう 1つのスキャナーから入力を取得すると、
NoSuchElementExcpetion
がスローされます。 これは、1つのスキャナーを閉じると、入力ストリームが閉じられるためです。 これが、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)
この問題を解決するには、スキャナーを 1つだけ使用します。 これは、1つのスキャナーが 1つの方法で使用され、もう 1つのスキャナーが別の方法で使用される場合にも適用されます。
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()
を使用して、スキャナーに次の行があるかどうかを確認します。 Scanner に次の行がある場合は 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
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook