扫描程序对象对整数与字符串输入的行为不同

时间:2012-10-25 01:13:45

标签: java inputstream user-input

  

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

在以下两个代码片段中,我首先询问所需的输入数量,并让用户输入特定类型的许多输入。当所需的输入是String类型时,除了我首先使用s.next()之外,它只需要少一点输入,而对于Integers,它可以正常工作。我不明白为什么。有人可以解释一下吗?感谢

带字符串输入和nextLine函数的第一个代码:

public static void main(String args[]){

    Scanner s = new Scanner(System.in);

    int num =  s.nextInt();

    String[] inputs = new String[num];

    for (int i = 0; i < inputs.length; i++) {
        inputs[i]=s.nextLine();
    }
    System.out.println("end of code");
}

使用整数输入和nextInt函数的第二个代码:

public static void main(String args[]){

    Scanner s = new Scanner(System.in);

    int num =  s.nextInt();

    Integer[] inputs = new Integer[num];

    for (int i = 0; i < inputs.length; i++) {
        inputs[i]=s.nextInt();
    }
    System.out.println("end of code");
}

1 个答案:

答案 0 :(得分:0)

这是因为以下几行:

int num =  s.nextInt();

你的下一个INT只返回INT,直到它到达\ n字符。

如果您有这样的测试文件:

4
1
2
3
4

您的角色代码如下所示:

4'\n'
1'\n'
2'\n'
3'\n'
4'\n'

因此,当您获取整数时,它将为扫描仪上的“nextInt()”方法获取4。当你告诉它抓住下一行“nextLine()”时,它将获取该行的剩余部分,它只是'\ n'并且不会将任何内容存储到数组的第一个值中。

反过来说,如果你告诉它抓住下一个整数“nextInt()”,它将搜索直到找到下一个整数,这将导致1进入数组的第一个值。