我收到错误,我不明白原因。我正在尝试使用扫描程序方法获取用户输入,以便为数组的索引分配值,数字。允许用户保持 - 继续 - 将值输入到数组数字中,但是,如果用户决定停止,则输入 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语句错误代码设计的条件?
答案 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上搜索,就会有很多类似的问题。