数组将0添加为第一个元素,而不是我的输入[java]

数组将0添加为第一个元素,而不是我的输入[java],java,arrays,Java,Arrays,我一直在写这个程序来计算字符串/一行字符串中的元音。现在,我已经完成了整个程序,它确实正确地输出了所有输入的元音数,但问题是,由于某种原因,数组的第一个输入总是0/不存在 我在这里给你一个例子和代码,很难解释: Scanner sc = new Scanner(System.in); int numberOfEntries = sc.nextInt() //this would be the number of lines of strings String[] array = new Stri

我一直在写这个程序来计算字符串/一行字符串中的元音。现在,我已经完成了整个程序,它确实正确地输出了所有输入的元音数,但问题是,由于某种原因,数组的第一个输入总是0/不存在

我在这里给你一个例子和代码,很难解释:

Scanner sc = new Scanner(System.in);
int numberOfEntries = sc.nextInt() //this would be the number of lines of strings
String[] array = new String[numberOfEntries];
int k = 0;
while(sc.hasNext() && k < numberOfEntries){
    array[k] = sc.nextLine();
    k++;
}
如果我输出阵列,我将得到以下输出:

[, abcd, efgh, ijkl, mnop]
我已经试着只用了

for(int i = 0; i < array.length; i++){
    array[i] = sc.nextLine();
}
认为它可能解决问题,但没有改变。我现在没有主意了,虽然我确信我只是在某个地方犯了一些愚蠢的小错误,但我就是看不出来


你好,George

在您调用nextInt后,由于缓冲区中的“\n”出现了空行。键入整数后按Enter键。Scanner在调用nextInt时使用整数,但它不接触后面的“\n”

要解决此问题,请在读取int后调用nextLine,并放弃结果:

int numberOfEntries = sc.nextInt();
sc.nextLine(); // Throw away the '\n' after the int

由于调用nextInt后缓冲区中存在“\n”,因此会得到空行。键入整数后按Enter键。Scanner在调用nextInt时使用整数,但它不接触后面的“\n”

要解决此问题,请在读取int后调用nextLine,并放弃结果:

int numberOfEntries = sc.nextInt();
sc.nextLine(); // Throw away the '\n' after the int
语句int numberOfEntries=sc.nextInt;读取数字,将下一个字符保留为换行符,作为下一个要读取的字符

对sc.nextLine的第一次调用会看到这一新行,并将其识别为空行的结尾。对于示例输入,这会导致调用返回空字符串

解决方案是在sc.nextLine之后添加对sc.nextLine的额外调用以使用,然后丢弃最后一个数字之后直到行尾的所有字符

实际上。。。这是扫描器API中相当常见的初学者错误。

语句int numberOfEntries=sc.nextInt;读取数字,将下一个字符保留为换行符,作为下一个要读取的字符

对sc.nextLine的第一次调用会看到这一新行,并将其识别为空行的结尾。对于示例输入,这会导致调用返回空字符串

解决方案是在sc.nextLine之后添加对sc.nextLine的额外调用以使用,然后丢弃最后一个数字之后直到行尾的所有字符

实际上。。。这是Scanner API中一个相当常见的初学者错误。

这是因为Scanner.nextLine方法不会读取输入的最后一个换行符,因此在下次调用Scanner.nextLine时会使用该换行符

这是因为Scanner.nextLine方法不会读取输入的最后一个换行符,因此在下次调用Scanner.nextLine时会使用该换行符

可能的重复可能的重复