2

ユーザー入力を取得しようとしていますが、エラーが発生し続けます: No Line Found 行番号が "input = fileS.nextLine();" を参照しています。エラーの原因として

System.out.print("Is this table a simple table? Please check document to confirm, If YES please Enter Y If NO please Enter N \n");
             Scanner fileS = new Scanner(System.in);

             input = fileS.nextLine();
             input = input.trim();
             input = input.toLowerCase();

             tableCount ++;
             fileS.close();

それが私のコードです。 fileS.hasNextLine() を使用すると、このエラーを回避できることを理解していますが、これによりユーザー入力がすべてスキップされます。

ここで何が欠けていますか?

スキャナは公開機能にあります

前もって感謝します!

4

4 に答える 4

2

入力は次のように読む必要があります。

while(fileS.hasNextLine())
{
    //Your operations here
}

あなたがするとき

fileS.nextLine();

読み取りを試み、行が見つからない場合は例外をスローします。こちらもお探しください

fileS.close()

読む前にコードファイルに。読み取り操作の前に閉じている場合、再度開くことはできず、例外がスローされます。私は数週間前にそれを持っていたので、これが最も可能性の高い原因だと思います:P

于 2013-09-10T19:04:14.053 に答える
1

代わりに、ほとんど常にnextLine()使用する必要があります。hasNextLine()しかし、あなたがSystem.in指していないか、入力を受け取ったり開いたりできるものでconsoleはない可能性があるため、入力をスキップしています。そのため、データがなくても強制的に読み取るメソッドでありながら、入力を期待しているが、スローされた例外を取得できない場合、まったく機能しません。あなたが指している場所を確認する必要があるかもしれません。inputstreaminputstreamhasNextLinenextLine()System.in

null でないsetIn(Console())かどうかを確認することもできるので、手動で設定することもできます。console()

于 2013-09-10T18:26:39.613 に答える
0

ループ内で Scanner(System.in) を呼び出しているようです。ループの先頭または前に配置してみてください。そのため、テストは機能し、作業は機能しません。

Is this table a simple table? Please check document to confirm, If YES please Enter Y If NO please Enter N 
y
Is this table a simple table? Please check document to confirm, If YES please Enter Y If NO please Enter N 
Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Scanner.java:1585)
    at ScannerIssue.main(ScannerIssue.java:11)

..

        while(true){
        System.out.print("Is this table a simple table? Please check document to confirm, If YES please Enter Y If NO please Enter N \n");
        Scanner fileS = new Scanner(System.in);

        String input = fileS.nextLine();
        input = input.trim();
        input = input.toLowerCase();

//        tableCount ++;
        fileS.close();
        }

上記のコードは、Move the Scanner fileS = new Scanner(System.in); エラーを引き起こしています。メソッドまたはクラスのスコープの先頭まで。

次のようなものを使用できます。

Scanner fileS = new Scanner(System.in); //moved out of the loop
            while (true) {
                System.out
                        .print("Is this table a simple table? Please check document to confirm, If YES please Enter Y If NO please Enter N \n");
                String input = fileS.nextLine();
                input = input.trim();
                input = input.toLowerCase();
                // tableCount ++;
                if ("n".equalsIgnoreCase(input)) {
                    break;
                }
            }
            fileS.close(); //moved out of the loop
            System.out.println("Good bye!");
        }

結果は次のようになります。

Is this table a simple table? Please check document to confirm, If YES please Enter Y If NO please Enter N 
Y
Is this table a simple table? Please check document to confirm, If YES please Enter Y If NO please Enter N 
A
Is this table a simple table? Please check document to confirm, If YES please Enter Y If NO please Enter N 
N
Good bye!
于 2013-09-10T20:59:01.453 に答える
0

最初のループで機能する場合は、次のような問題が考えられます。

Java DOC から:

ソースが Closeable インターフェースを実装している場合、 Scanner が閉じられると、その入力ソースが閉じられます。

つまり、System.in を閉じます。

削除するfileS.close();と、プログラムは正常に動作するはずです!

于 2014-04-09T15:14:25.740 に答える