5

我有一个BufferedReader等待输入,但由于某种原因,它不等待第二次读取并继续打印我的第三个打印语句。

代码:

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();

示例执行如下:请为您的单词输入一个字母。//在这里等待输入

一种

请为这件作品输入 X 位置。//不要在这里等???

请输入这件作品的 Y 位置。

4

2 回答 2

5

它不等待的原因是因为xVal=(char)inFromUser.read();正在从行中读取“\n”letter=(char)inFromUser.read();

因此,一种解决方案是inFromUser.readLine();在每个提示后添加一个:

    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 回答
5

发生这种情况是因为一旦您在输入字母后按 Enter 键,您也会将换行符发送到流中。

当您read()第一次调用时,它会按预期返回第一个字符。但是,当您read()第二次调用时,它只会读入缓冲在流中的换行符,从而看起来像是跳过了读取指令。

解决方案是告诉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 回答