2014-10-16 59 views
2

我现在很难解决这个问题。 所以,我有这个代码片断,询问用户的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; 

但每次我运行它,它总是跳过输入字符串“名字”,我尝试使用input.next();就可以了,但它现在会跳过字符串“accnum”的输入。

编辑:它也恰好发生如果从“名称”的输入上有一个空间,例如:约翰·多伊。

我在这里错过了什么吗?

+1

你是否在这段代码之前使用同一个扫描器? – 2014-10-16 14:08:03

+0

@LukeWillis - 其实这是一个很好的观点。 – TheLostMind 2014-10-16 14:09:58

回答

0

试试这个。我认为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; 
+0

后没有碰到任何东西,我编辑了原始帖子,问题只存在,如果我在字符串“名称”上输入了一个字符串上有空格 – 2014-10-16 14:09:27

+0

你试过我的代码@ScratchFever。 – Karunakar 2014-10-16 14:13:44

+0

是的,它仍然跳过它 – 2014-10-16 14:41:22

1

nextLine()吞掉帐号PIN码next()产生的换行符(当您敲入回车键时)。所以,它不会要求名称。在pin = input.next();后加input.nextLine()并尝试

+0

尝试,它仍然跳过“accnum” – 2014-10-16 14:06:42

+0

@ScratchFever - 然后使用nextLine()'无处不在:P。旧的答案应该起作用。输入数字和引脚后,你是否输入密码?即2次? – TheLostMind 2014-10-16 14:07:42

+0

不,我在输入 – 2014-10-16 14:20:38

0

如果您使用input的代码块之前的任何地方,那么你需要一定要早叫nextLine上。

如果您改为使用next,那么您的输入流仍将包含一个新的行字符(\n)。因此,当您使用nextLine开始此代码块时,该呼叫将采用先前的\n而不是刚输入的名称。

一般来说,如果您的Scanner正在阅读System.in,那么您应该在任何地方都使用nextLinenext,nextInt,其他下一个方法是为了更可预测的数据。

0

好吧,这对于大家的帮助,我设法通过添加“input.nextLine();”来解决它。之前“name = input.nextLine();”