在我的代码(下方)中,刚刚跳过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)
答案 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。