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

时间:2014-10-16 14:00:10

标签: 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.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;

但每次我运行它时,它总是跳过String" name"的输入,我尝试使用input.next();在它上面它可以工作,但现在它将跳过String" accnum"的输入。

编辑:如果来自" name"的输入也会发生。它上面有一个空格,例如:John Doe。

我在这里错过了什么吗?

4 个答案:

答案 0 :(得分:1)

nextLine()会占用帐号密码next()生成的换行符(当您按Enter键时)。所以,它不会要求名字。在input.nextLine()之后添加pin = input.next();并尝试

答案 1 :(得分:0)

试试这个。我认为next()的问题。因为next使用默认分隔符读取输入作为标记(我认为空格是默认分隔符)。:

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;

答案 2 :(得分:0)

如果您在此代码块之前的任何位置使用input,那么您需要确保先前致电nextLine

如果您使用next,那么您的输入流仍会包含换行符(\n)。因此,当您使用nextLine启动此代码块时,该调用将采用之前的\n而不是刚刚输入的名称。

一般情况下,如果您的Scanner正在阅读System.in,那么您应该到处使用nextLinenextnextInt和其他下一个方法适用于更可预测的数据。

答案 3 :(得分:0)

好的,那是为了帮助每个人,我设法通过添加“input.nextLine();”来解决它。在“name = input.nextLine();”

之前