简体   繁体   中英

Java method not waiting on BufferedReader input?

I have a BufferedReader waiting for input, but for some reason it doesn't wait for the second read and continues to print my third print statement.

Code:

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

Example execution goes as follows: Please enter a letter for your word. //Waits on input here

a

Please enter a X location for this piece. //Doesn't wait here???

Please enter a Y location for this piece.

The reason why it was not waiting is because xVal=(char)inFromUser.read(); was reading the "\\n" from the line letter=(char)inFromUser.read();

So one solution it to add an inFromUser.readLine(); after each prompt:

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

You add a inFromUser.readLine(); after each prompt, so it can read the "\\n".

This is happening because once you press enter after typing a letter, you are also sending the newline character into the stream.

When you call read() the first time it returns the first character as expected. However, when you call read() the second time it will simply read in the newline character that is buffered in the stream, thereby seeming like it skipped over a read instruction.

The solution is to tell the BufferedReader to read the entire line, then fetch the first character from the line:

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

You may also want to improve upon this by doing some validation in case the user simply presses enter without inputting a letter.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM