Java方法没有等待BufferedReader输入?

use*_*257 5 java 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();
Run Code Online (Sandbox Code Playgroud)

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

一个

请输入此作品的X位置.//不等在这里???

请输入此作品的Y位置.

dre*_*ash 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();
Run Code Online (Sandbox Code Playgroud)

你添加一个inFromUser.readLine(); 每次提示后,都可以读取"\n".


Phi*_*l K 5

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

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

解决方法是告诉BufferedReader读取整行,然后从行中获取第一个字符:

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

您可能还希望通过进行一些验证来改进这一点,以防用户只需按Enter键而不输入字母.