为什么有时会跳过input.next()?

时间:2015-07-05 23:52:49

标签: java loops iterator

在我的代码(下方)中,刚刚跳过input.next();。有人可以指出为什么吗?

for (int i=0; i<empNum; i++)//for each employee they want to work with
    {
        System.out.print("\r\n\r\nPROFILE FOR EMPLOYEE #" + (i+1) + ":\r\n"
                        +"type Hourly(1), Salaried(2), Salaried plus Commission(3)\r\n"
                        +"Enter 1, 2, or 3 ==> ");//display type gathering
        int typeChooser = input.nextInt();//gather type

        System.out.print("Name ==> ");//ask for name
        String name = input.next();//get name

        System.out.print("Social Security Number ==> ");//ask for ssn
        String ssn = input.next();//THIS PART IS SKIPPED

        System.out.print("Birthday Month (1-12) ==> ");//ask for bdayMonth
        int bdayMonth = input.nextInt();//get bdayMonth

        System.out.print("Birthday bonus week (1-4) ==> ");//ask for bdayWeek
        int bdayWeek = input.nextInt();//get bdayWeek            
}

编辑:我刚刚注意到它被跳过的唯一时间是名称中有空格(即Bob Smith而不是Bob)

4 个答案:

答案 0 :(得分:1)

社会安全号码是否包含空格?如果是,您可以尝试 nextLine(); 方法。此方法返回当前行的其余部分,不包括末尾的任何行分隔符。

System.out.print("Social Security Number ==> ");//ask for ssn
String ssn = input.nextLine();

答案 1 :(得分:1)

我假设您使用Scanner。默认情况下,扫描程序使用空格作为分隔符,因此next()方法只会读取到下一个空格,而不是结束字符。因此,如果输入中有空格,则应使用nextLine()方法。

答案 2 :(得分:1)

根据Umut的回答,您的代码看起来像

 input.nextLine();
 System.out.print("Social Security Number ==> ");//ask for ssn
 String ssn = input.nextLine();

您需要先拨打nextLine(),因为input.next()不会超过换行令牌

答案 3 :(得分:0)

如文档here

中所述
  

public String next()

     
    

查找并返回下一个完整的令牌     这个扫描仪。之前是一个完整的标记,然后是输入     匹配分隔符模式。此方法可能会在等待时阻止     输入到扫描,即使先前调用hasNext()返回     真。

  

因此,当您的名称输入中有空格时,next()仅返回第一个标记,因为其默认分隔符是空格字符,因此剩余的标记仍在缓冲区中,然后读取首先在下面调用next()。在这里使用nextLine()占用整行(默认分隔符为&#39; \ n&#39;为此),或者您可以更喜欢使用BufferedReader。