Java方法没有等待BufferedReader输入?

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

以下是您所需的翻译:

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

a

请为此部分输入X位置。// 在这里不等待???

请为此部分输入Y位置。


两个答案都完美地解决了我的问题,并且解释了我做错的地方。谢谢大家的帮助! - user1874257
2个回答

5

之所以没有等待是因为xVal=(char)inFromUser.read();读取了letter=(char)inFromUser.read();行中的"\n"。

因此,一个解决方案是在每个提示后添加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"。

5
这是因为在您输入一个字母后按下回车,会将换行符号发送到流中。
第一次调用read()时,返回第一个字符,正如所预期的那样。但是,当第二次调用read()时,它只会读取缓存在流中的换行符号,看起来好像跳过了一个读取指令。
解决方法是告诉BufferedReader读取整行,然后从该行获取第一个字符。
System.out.println("Please enter a letter for your word.(a-z)");
letter = inFromUser.readLine().charAt(0);

您可能还希望通过一些验证来改进此功能,以防用户只是按下回车键而没有输入字母。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接