2

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

在下面的两个代码片段中,我首先询问所需的输入数量,然后让用户输入特定类型的那么多输入。当所需的输入是 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");
}
4

1 回答 1

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 进入数组的第一个值。

于 2012-10-25T01:47:12.110 回答