问题与nextLine(); [重复]

问题描述 投票:11回答:3

可能重复:Scanner issue when using nextLine after nextInt

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

但是,当程序要求学生的近亲时,它不会让用户输入任何内容而直接结束程序。

下面是我完成的代码:

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

java java.util.scanner
3个回答
24
投票

当您按下回车键(换行符\n字符时,会发生问题。 nextInt()仅使用整数,但跳过换行符\n。要解决此问题,您可能需要在读取input.nextLine()之后添加一个附加的int,这可能会消耗\n

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

// rest of the code

9
投票

问题出在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,此方法也可能在等待输入扫描时阻塞。


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();
© www.soinside.com 2019 - 2024. All rights reserved.