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



我正在使用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对象来获取字符串数组。这会导致一个单独的错误,如果有帮助的话,我可以分享
  • 打印名称1/7的值(为空(

您只需要在scan.nextInt((之后添加scan.nextLine((,因为Scanner.nextInt方法不会读取通过点击"输入";因此,对Scanner.nextLine的调用在读取该换行后返回。

当您在Scanner.next((之后使用Scanner.nextLine或任何Scanner.netToo方法(除了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();
}
}
}

最新更新