如何在Java的for循环中获取不同数据类型的多个用户输入?

时间:2019-02-02 17:26:51

标签: java for-loop java.util.scanner user-input

我正试图提示用户键入一个字符串,该字符串将存储在字符串数组中,然后输入一个int并将其放入int数组中。

我遇到了打印第一行的问题,但是没有提示用户输入字符串。然后立即打印第二个打印语句,用户只能键入一个整数。

到目前为止,我有:

    int i, n = 10;
    String[] sentence = new String[1000];
    int[] numbers = new int[1000];



    for(i = 0; i < n; i++)
        {
        System.out.println("Enter String" + (i + 1) + ":");
        sentence[i] = scan.nextLine();

        System.out.printf("Enter int " + (i + 1) + ":");
        numbers[i] = scan.nextInt();
        }

作为输出,我得到:

Enter String 1:
Enter int 1:

您可以在此处输入一个int,并将其存储到int数组中。但是您不能为String数组输入String。

请帮助。

3 个答案:

答案 0 :(得分:1)

像这样放置scan.nextLine():

for(i = 0; i < n; i++){
    System.out.println("Enter String" + (i + 1) + ":");
    sentence[i] = scan.nextLine();

    System.out.printf("Enter int " + (i + 1) + ":");
    numbers[i] = scan.nextInt();
    scan.nextLine();

}

答案 1 :(得分:1)

此问题是由于nextInt()方法引起的。

这里发生的是,nextInt()方法使用了用户输入的整数,但没有使用按 enter 键时创建的用户输入末尾的换行符。

因此,当您输入整数后按 enter 时,对nextLine()的下一次调用将消耗换行符,而{{1}在循环的最后一次迭代中不会使用该换行符} 方法。这就是为什么它在循环的下一个迭代中跳过nextInt()的输入,而不等待用户输入String的原因

解决方案

可以通过调用消耗新行字符String的{​​{1}}呼叫之后

nextLine()

答案 2 :(得分:0)

使用 sc.next();而不是 sc.nextLine();如果无法在第一次迭代中输入字符串值。

Scanner sc = new Scanner(System.in);

for(i = 0; i < n; i++);
    System.out.println("Enter String" + (i + 1) + ":");
    sentence[i] = sc.next();

    System.out.printf("Enter int " + (i + 1) + ":");
    numbers[i] = sc.nextInt();
    sc.nextLine();
}