UserInput 的数组索引分配错误作为 If-Else 条件

Array Index assignment error with UserInput as If-Else conditional

我收到一个错误,我不太明白原因。我正在尝试使用 Scanner 方法获取用户输入,以将值分配给数组的索引,numbers。允许用户继续 - 继续 - 在数组 numbers 中输入值,但是,如果用户决定停止,输入 0 将打破分配数组索引值。

    int[] numbers = new int[100];
    int[] countIndex = new int[100];
    int[] numberOcc = new int[100];

    for (int i = 0; i < countIndex.length; i++)
    {
        countIndex[i] = i;
    }

    System.out.println("Enter your integer values: ");
    for (int i = 0; i < numbers.length; i++)
    {

        if(input.nextInt() == 0)
        {
            break;
        }
        else
        {
            numbers[i] = input.nextInt();
        }
    }

这段代码只是更大代码的一小部分,但是非常重要。 我得到的错误是代码允许用户在移动到下一个索引之前输入两次,但输入的是第一个整数总是跳过:

Enter your integer values: 
1
2
0
0 occurs 99 times
2 occurs 1 time

更新

    System.out.println("Enter your integer values: ");
    for (int i = 0; i < numbers.length; i++)
    {
        numbers[i] = input.nextInt();
        if(numbers[i] == 0)
        {
            break;
        }
    }

为什么 1 作为输入被忽略? 此外,是否使用 input.nextInt() 作为 if-else 语句错误代码设计的条件?

来自评论

However, a 0 is still being placed in the index,

By default, int values will be assigned 0。因此,当您不为 int 分配非零值时,它们仍将是 0。

一种解决方法是使用 arraylist。然后一旦你输入所有的数字,你就可以将数组列表转换为数组。

没有任何输入验证的简单示例

List<Integer> list = new ArrayList<Integer>();
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] defaultArray = new int[n];
// do validation for n
//assume n = 5 with values 1,2,0,3,2
for (int i = 0; i < n; i++) {
    int temp = in.nextInt();

    if (temp != 0) {
        list.add(temp);
        defaultArray[i] = temp;
    }
}
Integer[] positiveArray = new Integer[list.size()];
positiveArray = list.toArray(positiveArray);
System.out.println(Arrays.toString(defaultArray));  //will print [1, 2, 0, 3, 2]
System.out.println(Arrays.toString(positiveArray));  //will print [1, 2, 3, 2]

如果想把Integer arraylist转成int数组,在google上搜索一下,类似问题很多

Demo