Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Scannerクラスについて

こんにちは。
当方Javaは初心者なのですが、練習を兼ねてちょっとしたプログラムを書いていたところScannerクラスが思うように動かない状態に陥ってしまいました。頑張って原因を探ってみたところScannerクラスを2回newすることが不具合の原因であることは分かったのですが解決策が分かりません。現在の状態を再現するコードを下に用意しました。
---------------------------------------ここから-------------------------------------
import java.util.*;

public class Test{
    public static void main(String[] args){
        int x, y;
        x = -1;
        y = x;

        try {
            Scanner s = new Scanner(System.in);
            x = s.nextInt();
            y = s.nextInt();
            s.close();
        } 

        catch (Exception e) {
            System.out.println("エラー1" + e);
        }

        try {
            Scanner s = new Scanner(System.in);
            x = s.nextInt();
            y = s.nextInt();
            s.close();
        } 

        catch (Exception e) {
            System.out.println("エラー2" + e);
        }

        System.out.println(x + ":" + y);
    }
}

--------------------------------------ここまで------------------------------------------
上のコードを実行すると最初のtry文は正常に実行されますが、二度目のtry文に入った直後の入力する前の段階でNoSuchElementExceptionになってしまいます。
もし可能であればScannerクラスを二回以上newするような使い方をしたいのですが不可能なのでしょうか。
この現象の原因と対処法を教えていただけると幸いです。

1

回答

90994

閲覧

1件の回答

評価

0

catchした例外をそのように出力しない方が良い。
e.printStackTrace();としないと、本当の問題がなんなのか表示されない可能性が高い。
これは今回に限らず常に意識しておく方がいい。

今回の問題は、何も考えずにScanner#close()を使っていること。
e.printStackTrace()で例外の詳細を知り、Scannerの中(ソース)を覗いて見れば、なんでそうなるのか分かる…かもしれない。

それと、わざわざ「初心者」を書く必要はないよ。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。