nextLine()的问题;

时间:2013-01-22 06:13:36

标签: java java.util.scanner

  

可能重复:
  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();但它只会取用户输入的第一个字而不是我想要的。无论如何都有解决这个问题的方法吗?

3 个答案:

答案 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();