我一直在编写这个程序来计算字符串/一串字符串中的元音。现在,我已经完成了整个程序,它确实输出了所有输入的元音数量,但问题是数组的第一个输入由于某种原因总是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++;
}
所以这是代码中与问题相关的部分,其余部分都很好。出于某种原因,当我输入以下行时:
5
abcd
efgh
ijkl
mnop
qrst
如果我打印出数组,我将得到的输出是:
[, abcd, efgh, ijkl, mnop]
我尝试过只使用
for(int i = 0; i < array.length; i++){
array[i] = sc.nextLine();
}
认为它可以解决问题,但没有任何改变。我现在没有想法了,虽然我确信我只是在某个地方犯了一些愚蠢的小错误但我只是没有看到它。
亲切的问候,乔治
答案 0 :(得分:3)
由于调用'\n'
后位于缓冲区中的nextInt()
,您得到空行。输入整数后按 Enter 。扫描程序在nextInt()
的调用中使用整数,但它不会触及随后的'\n'
。
要解决此问题,请在阅读nextLine
后致电int
,然后弃置结果:
int numberOfEntries = sc.nextInt();
sc.nextLine(); // Throw away the '\n' after the int
答案 1 :(得分:2)
语句int numberOfEntries = sc.nextInt();
读取数字,将下一个字符(换行符)作为下一个要读取的字符。
第一次调用sc.nextLine()
会看到此换行符并将其识别为(空)行的结尾。对于您的示例输入,这会导致调用返回空字符串。
解决方案是在sc.nextLine()
之后添加额外的sc.nextInt()
来调用(然后丢弃)最后一位数后的任何字符,直到行尾。
(实际上......这是一个相当常见的初学者错误Scanner
API。)
答案 2 :(得分:0)
这是因为Scanner.nextInt()
方法没有读取输入的最后一个换行符,因此在下次调用Scanner.nextLine()
时会消耗换行符。