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上搜索一下,类似问题很多
我收到一个错误,我不太明白原因。我正在尝试使用 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上搜索一下,类似问题很多