2012-12-04 70 views
5

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

代码:

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

这两个答案完美的工作,并解释我做错了什么。 感谢您的帮助! – user1874257

+0

Np,欢迎你。 – dreamcrash

回答

5

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

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

解决的办法是告诉BufferedReader读取整个行,然后从行提取的第一个字符:

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

您可能还需要通过的情况下,做一些验证,用户只需在此,以改善无需输入字母即可进入。

+0

+1。把内联更好:) – dreamcrash

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”。