以下面的基本程序为例:
import java.util.Scanner;
public class Practice
{
public static void main(String[] args)
{
char userInput;
String convertString;
do
{
System.out.println("Here are your choices:");
System.out.println("A. \nB. \nC. \nD.");
Scanner kbd = new Scanner(System.in);
convertString = kbd.next();
userInput = convertString.charAt(0);
switch(userInput)
{
case 'A':
System.out.println("You have chosen A!");
break;
case 'B':
System.out.println("You have chosen B!");
break;
case 'C':
System.out.println("You have chosen C!");
break;
case 'D':
System.out.println("You have chosen D! This program will now terminate.");
break;
default:
System.out.println("Sorry, you have to make a selection.");
}
} while (userInput > 'D');
}
}
它工作得很好。但是,如果我不使用Scanner版本,而是使用System.in.read()版本,我的程序将在允许我进行选择之前循环 3 次。为什么会发生这种情况,我该如何解决?
由于我来自 C/C++ 背景,我假设这是因为输入流中有字符\n 'left over',并且当程序循环而不允许我输入所需的输入时,它正在“清除”流. 但如果这是真的,为什么它会循环 3 次而不是一次(因为要清除\n您只需要从输入流中获取另一个剩余字符)?
最后,哪种方法最好/更常用?
谢谢!