我正在尝试创建一个程序,在该程序中,用户可以使用扫描仪将值输入到数组中。
但是,当程序要求学生的近亲时,它不会让用户输入任何内容而直接结束程序。
下面是我完成的代码:
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();但只会使用用户输入的第一个单词,这不是我想要的。反正有解决这个问题的方法吗?
当您按下回车键(换行符\n
字符时,会发生问题。 nextInt()
仅使用整数,但跳过换行符\n
。要解决此问题,您可能需要在读取input.nextLine()
之后添加一个附加的int
,这可能会消耗\n
。
Function.print("Enter age: ");
stdAge = input.nextInt();
input.nextLine();.
// rest of the code
问题出在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,此方法也可能在等待输入扫描时阻塞。
在读取到行尾的input.nextLine();
之后进行input.nextInt();
调用。
示例:
Function.print("Enter age: ");
stdAge = input.nextInt();
input.nextLine(); //Call nextLine
Function.print("Enter next of kin: ");
stdKin = input.nextLine();