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

时间:2015-10-28 23:38:52

标签: java arrays assignment-operator

我收到错误,我不明白原因。我正在尝试使用扫描程序方法获取用户输入,以便为数组的索引分配值,数字。允许用户保持 - 继续 - 将值输入到数组数字中,但是,如果用户决定停止,则输入 0 将中断数组索引值的分配

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;
        }
    }

更新

latency

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

1 个答案:

答案 0 :(得分:2)

来自评论

  

但是,索引中仍然存在0,

By default, int values will be assigned 0。因此,当您不为int指定非零值时,它们仍为0。

另一种方法是使用arraylist。然后,一旦输入所有数字,就可以将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