Java 扫描仪输入跳过下一个输入

Java 扫描仪输入跳过下一个输入,java,java.util.scanner,Java,Java.util.scanner,我现在很难解决这个问题。 因此,我这里有一个代码片段,它要求用户输入3条信息 case 0: String accnum,pin,name; System.out.print("Enter account name: "); name = input.nextLine(); System.out.print("Enter account number: "); accnum = input.next(); System.o

我现在很难解决这个问题。 因此,我这里有一个代码片段,它要求用户输入3条信息

 case 0:
      String accnum,pin,name;
      System.out.print("Enter account name: ");
      name = input.nextLine();
      System.out.print("Enter account number: ");
      accnum = input.next();
      System.out.print("Enter account PIN: ");
      pin = input.next();
      atm.set_accinfos(name,accnum,pin);
      //System.out.print(atm.return_acc() + "\t" + atm.return_pin() + "\n");
    break;
但每次我运行它时,它总是跳过字符串“name”的输入,我尝试使用input.next();在它上面,它可以工作,但是现在它将跳过字符串“accnum”的输入

编辑:如果“name”的输入上有空格,也会发生这种情况,例如:johndoe


我在这里遗漏了什么吗?

帐户pin的
nextLine()
阻塞了由
next()
生成的换行符(当您点击enter键时)。所以,它不会问名字。在
pin=input.next()之后添加
input.nextLine(),然后再试一次。我认为next()有问题。因为next使用默认分隔符(我认为空格是默认分隔符)将输入读取为标记:


如果在这段代码之前的任何地方使用
input
,则需要确保在前面调用
nextLine

如果改用
next
,则输入流仍将包含新行字符(
\n
)。因此,当您使用
nextLine
启动此代码块时,该调用将采用上一个
\n
而不是刚才输入的名称


一般来说,如果您的
扫描仪
正在
中读取
系统,则应在任何地方使用
nextLine
next
nextInt
,以及其他next方法都是为了获得更可预测的数据。

好的,这对大家都有帮助,我设法解决了这个问题,在“name=input.nextLine();”之前添加了“input.nextLine();”

@ScratchFever-然后使用nextLine()`where:p。旧的答案应该有用。您是否在键入数字和pin后按enter键?。i、 e,2次?在这段代码之前,你使用的是同一个扫描仪吗?@LukeWillis-事实上这是一个很好的观点。另外,我编辑了原始帖子,问题只存在于我在字符串“name”上输入了一个带空格的字符串是的,它仍然跳过它
case 0:
String accnum,pin,name;

System.out.print("Enter account name: ");
name = input.nextLine();

System.out.print("Enter account number: ");
accnum = input.nextLine();

System.out.print("Enter account PIN: ");
pin = input.nextLine();

atm.set_accinfos(name,accnum,pin);
//System.out.print(atm.return_acc() + "\t" + atm.return_pin() + "\n");
break;