我有一个等待输入的bufferedreader但由于某种原因它不会等待第二次读取并继续打印我的第三个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();
示例执行如下: 请输入一个字母。 //等待输入
一
请输入此作品的X位置。 //不等在这里???
请输入此作品的Y位置。
答案 0 :(得分: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”。
答案 1 :(得分:5)
发生这种情况是因为一旦您在输入字母后按Enter键,您也会将换行符发送到流中。
第一次按预期返回第一个字符时调用read()
。但是,当您第二次调用read()
时,它只会读取流中缓冲的换行符,从而看起来像跳过读取指令。
解决方法是告诉BufferedReader
读取整行,然后从该行中获取第一个字符:
System.out.println("Please enter a letter for your word.(a-z)");
letter = inFromUser.readLine().charAt(0);
如果用户只是在不输入字母的情况下按Enter键,您可能还希望通过进行一些验证来改进这一点。