Java方法没有等待BufferedReader输入?

时间:2012-12-04 01:24:15

标签: java bufferedreader

我有一个等待输入的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位置。

2 个答案:

答案 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键,您可能还希望通过进行一些验证来改进这一点。