11

可能重复:
在 nextInt 之后使用 nextLine 时的扫描仪问题

我正在尝试创建一个程序,它允许用户使用扫描仪将值输入到数组中。

然而,当程序询问学生的近亲时,它不允许用户输入任何内容并立即结束程序。

以下是我所做的代码:

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(); 但它只会占用用户输入的第一个单词,这不是我想要的。有没有办法解决这个问题?

4

3 回答 3

24

当您按下回车键时会出现问题,这是一个换行符\nnextInt()仅消耗整数,但会跳过换行符\n。要解决这个问题,您可能需要input.nextLine()在阅读 后添加一个额外的int,它可以消耗\n.

Function.print("Enter age: ");
stdAge = input.nextInt();
input.nextLine();.

// rest of the code
于 2013-01-22T06:16:28.063 回答
9

问题在于input.nextInt()this 函数只读取 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() 返回下一个 token , nextLine() 返回 NextLine。如果我们知道差异就好了。标记是由空格包围的一串非空白字符。

来自文档

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

于 2013-01-22T06:27:36.637 回答
4

拨打input.nextLine();电话,input.nextInt();然后读取到行尾。

例子:

Function.print("Enter age: ");
stdAge = input.nextInt();
input.nextLine();  //Call nextLine

Function.print("Enter next of kin: ");
stdKin = input.nextLine();
于 2013-01-22T06:17:06.433 回答