这是我的代码
Scanner keyboard = new Scanner(System.in);
System.out.print("Last name: ");
lastName = keyboard.nextLine();
System.out.print("First name: ");
firstName = keyboard.nextLine();
System.out.print("Email address: ");
emailAddress = keyboard.nextLine();
System.out.print("Username: ");
username = keyboard.nextLine();
并输出此
Last name: First name:
基本上它跳过让我输入lastName
并直接转到firstName
的提示符。
但是,如果我使用keyboard.next()
代替keyboard.nextLine()
,则可以正常使用。有什么想法吗?
答案 0 :(得分:8)
让我猜一下 - 您没有显示使用上面尝试获取lastName的扫描程序的代码。在该尝试中,您不会处理行结束令牌,因此它会悬空,只有在您尝试获取nextLine()
的{{1}}调用时才被吞没
例如,如果你有这个:
lastName
你会遇到问题。
一种解决方案,只要您将EOL令牌悬空,只需拨打Scanner keyboard = new Scanner(System.in);
System.out.print("Enter a number: ");
int number = keyboard.nextInt(); // dangling EOL token here
System.out.print("Last name: ");
lastName = keyboard.nextLine();
即可吞下它。
例如,
keyboard.nextLine()