我正在尝试创建一个程序,让用户可以使用扫描仪将值输入到数组中。
然而,当程序询问学生的近亲时,它不会让用户输入任何内容并立即结束该程序。
以下是我所做的代码:
if(index!=-1)
{
Function.print("Enter full name: ");
stdName = input.nextLine();
Function.print("Enter student no.: ");
stdNo = input.nextLine();
Function.print("Enter age: ");
stdAge = input.nextInt();
Function.print("Enter next of kin: ");
stdKin = input.nextLine();
Student newStd = new Student(stdName, stdNo, stdAge, stdKin);
stdDetails[index] = newStd;
}
我尝试过使用next();但它只会取用户输入的第一个字而不是我想要的。无论如何都有解决这个问题的方法吗?
答案 0 :(得分:21)
当您按Enter键时出现问题,该键是换行符\n
字符。 nextInt()
仅使用整数,但会跳过换行符\n
。要解决此问题,您可能需要在阅读input.nextLine()
之后再添加int
,这可能会消耗\n
。
Function.print("Enter age: ");
stdAge = input.nextInt();
input.nextLine();.
// rest of the code
答案 1 :(得分:6)
问题在于input.nextInt()
此函数只读取int值。因此,当您继续使用input.nextLine()
阅读时,您会收到“\ n” Enter 键。因此,要跳过此处,您必须添加input.nextLine()
。
Function.print("Enter age: ");
stdAge = input.nextInt();
input.nextLine();
Function.print("Enter next of kin: ");
stdKin = input.nextLine();
为什么next()
无效..?
next()返回下一个标记,nextLine()返回NextLine。如果我们知道差异就很好。令牌是由空格包围的非空白字符串。
来自Doc
查找并返回此扫描仪的下一个完整令牌。在完成令牌之前和之后是与分隔符模式匹配的输入。即使之前的hasNext()调用返回true,此方法也可能在等待输入扫描时阻塞。
答案 2 :(得分:3)
在input.nextLine();
之后拨打input.nextInt();
电话,直至行尾。
示例:
Function.print("Enter age: ");
stdAge = input.nextInt();
input.nextLine(); //Call nextLine
Function.print("Enter next of kin: ");
stdKin = input.nextLine();