scanner获取用户输入的整数,然后获取字符串数组,但跳过第一个输入的字符串

zynd9foi  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(550)

我正在使用scanner对象获取用户输入。扫描仪首先获取一个名为“num”的整数。然后我创建一个大小为'num'的字符串数组,用同一个扫描器通过for循环获取的字符串填充这个数组。我的问题是,当获取第一个字符串值时,扫描器似乎通过给它分配一个空字符串来“跳过”它。为什么要这么做?

import java.util.Scanner;

public class KrisKindle {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        System.out.println("How many people are there?");
        int num = scan.nextInt();

        String[] names = new String[num];

        for(int i = 0; i < names.length; i++) {
            System.out.println("Enter name of person " + (i +1) + "/" + num);
            names[i] = scan.nextLine();
        }

    }
}

以下是此程序运行时的示例输出:

How many people are there?
7
Enter name of person 1/7
Enter name of person 2/7
Adam
Enter name of person 3/7
Eve
Enter name of person 4/7

到目前为止,我尝试了:
创建一个单独的scanner对象来获取字符串数组。这会导致一个单独的错误,如果有帮助的话,我可以与大家分享
打印name 1/7的值(为空)

cxfofazt

cxfofazt1#

您只需要在scan.nextint()之后添加scan.nextline(),因为scanner.nextint方法不会读取通过按“enter”创建的输入中的换行符,因此对scanner.nextline的调用在读取该换行符后返回。
在scanner.next()或任何scanner.nextfoo方法(nextline本身除外)之后使用scanner.nextline时,都会遇到类似的行为

public class KrisKindle {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        System.out.println("How many people are there?");
        int num = scan.nextInt();
        scan.nextLine();  // This line you have to add (It consumes the \n character)
        String[] names = new String[num];

        for(int i = 0; i < names.length; i++) {
            System.out.println("Enter name of person " + (i +1) + "/" + num);
            names[i] = scan.nextLine();
        }

    }
}

相关问题