Java Scanner nextLine()有时会跳过输入
这是我的密码Java Scanner nextLine()有时会跳过输入,java,java.util.scanner,Java,Java.util.scanner,这是我的密码 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.nex
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()
,它可以正常工作。你知道为什么吗?让我猜猜——在试图获取姓氏的过程中,你还没有看到使用扫描器的代码。在这种尝试中,您没有处理行尾标记,因此它处于悬空状态,只会被对nextLine()
的调用吞没,您尝试在那里获取lastName
例如,如果您有:
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();
你会有问题的
一种解决方案是,每当您让EOL令牌悬空时,通过调用keyboard.nextLine()
将其吞下
e、 g
Scanner keyboard = new Scanner(System.in);
System.out.print("Enter a number: ");
int number = keyboard.nextInt();
keyboard.nextLine(); // **** add this to swallow EOL token
System.out.print("Last name: ");
lastName = keyboard.nextLine();
这正是发生的事情。谢谢@杰森:不客气。我们大多数人在开始使用扫描仪时都会遇到这个问题。另一种可能的解决方案是使用一个扫描仪获取行,然后使用另一个扫描仪处理行中的文本,这很好,只要在使用后关闭任何扫描仪(链接到System.in的扫描仪除外)。