5

入力をBufferedReader待っていますが、何らかの理由で2回目の読み取りを待たずに、3回目のprintステートメントを出力し続けます。

コード:

BufferedReader inFromUser =new BufferedReader(new InputStreamReader(System.in));
char letter,xVal;
int yVal;


System.out.println("Please enter a letter for your word.(a-z)");
letter=(char)inFromUser.read();  
System.out.println("Please enter a X location for this piece.(A-J)");
xVal=(char)inFromUser.read();
System.out.println("Please enter a Y location for this piece.(0-9)");
yVal=inFromUser.read();

実行例は次のとおりです。単語の文字を入力してください。//ここで入力を待ちます

a

この作品のXの場所を入力してください。//ここで待たない???

この作品のYの位置を入力してください。

4

2 に答える 2

5

これは、文字を入力した後に Enter キーを押すと、改行文字もストリームに送信されるために発生します。

read()初めて呼び出すと、期待どおりに最初の文字が返されます。ただし、read()2回目に呼び出すと、ストリームにバッファリングされている改行文字が読み込まれるため、読み取り命令がスキップされたように見えます。

BufferedReader解決策は、 に行全体を読み取ってから、行から最初の文字を取得するように指示することです。

System.out.println("Please enter a letter for your word.(a-z)");
letter = inFromUser.readLine().charAt(0);

ユーザーが文字を入力せずに単に Enter キーを押した場合に備えて、何らかの検証を行うことで、これを改善することもできます。

于 2012-12-04T01:35:51.467 に答える
5

待機していなかった理由はxVal=(char)inFromUser.read();、行から「\n」を読み取っていたためですletter=(char)inFromUser.read();

したがってinFromUser.readLine();、各プロンプトの後に追加する1つの解決策:

    System.out.println("Please enter a letter for your word.(a-z)");
    letter=(char)inFromUser.read(); 
    inFromUser.readLine(); 
    System.out.println("Please enter a X location for this piece.(A-J)");
    xVal=(char)inFromUser.read();
    inFromUser.readLine();
    System.out.println("Please enter a Y location for this piece.(0-9)");
    yVal=inFromUser.read();
    inFromUser.readLine();

inFromUser.readLine(); を追加します。各プロンプトの後、「\n」を読み取ることができます。

于 2012-12-04T01:28:44.340 に答える