Java でスキャナを使用しているときに No such Element Exception が発生する

Sheeraz Gul 2023年10月12日
Java でスキャナを使用しているときに No such Element Exception が発生する

このチュートリアルでは、Java でスキャナーを使用する際の NoSuchElementException エラーの解決方法を示します。

Java でスキャナを使用しているときに No such Element Exception が発生する

Scanner クラスは、Java プログラムでユーザー入力を取得するために使用されます。 next()nextInt() などのいくつかのユーティリティ メソッドを使用します。

これらのメソッドを使用する場合、スキャナは Java で NoSuchElementException エラーをスローする可能性があります。 これらの例外の理由は次のとおりです。

  1. ユーザー入力を取得するための 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() メソッドは、すべての入力ストリームを閉じます。

  2. 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 Gul
Sheeraz Gul avatar Sheeraz Gul avatar

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

関連記事 - Java Error