【问题标题】:Array adds 0 as the first element instead of my input [java]数组添加 0 作为第一个元素而不是我的输入 [java]
【发布时间】:2015-05-24 10:41:48
【问题描述】:

我一直在编写这个程序来计算字符串/一行字符串中的元音。现在,我已经完成了整个程序,它确实正确输出了所有输入的元音数量,但问题是数组的第一个输入总是 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();
}

认为它可能会解决问题,但没有任何改变。我现在没有想法,虽然我确信我只是在某个地方犯了一些愚蠢的小错误,我只是没有看到它。

亲切的问候,乔治

【问题讨论】:

标签: java arrays


【解决方案1】:

在您调用nextInt() 后,由于'\n' 位于缓冲区中,您会得到空行。输入整数后按 Enter。 Scanner 在nextInt() 的调用中消耗了整数,但它并没有接触到后面的'\n'

要解决此问题,请在阅读您的int 后调用nextLine,并丢弃结果:

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

【讨论】:

    【解决方案2】:

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

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

    解决方案是在sc.nextInt() 之后添加对sc.nextLine() 的额外调用,以消耗(然后丢弃)最后一位数字之后直到行尾的所有字符。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-27
        • 1970-01-01
        • 1970-01-01
        • 2022-06-29
        • 2021-09-24
        • 2023-02-24
        • 1970-01-01
        相关资源
        最近更新 更多