gpt4 book ai didi

java - UserInput 作为 If-Else 条件时出现数组索引分配错误

转载 作者:行者123 更新时间:2023-12-02 04:15:11 25 4
gpt4 key购买 nike

我收到一个错误,但我不太明白原因。我正在尝试使用 Scanner 方法获取用户输入,以将值分配给数组的索引,数字。允许用户继续 - 向数组 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 。然后输入所有数字后,就可以将 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 array,只要在google上搜索一下,就有很多类似的问题。

Demo

关于java - UserInput 作为 If-Else 条件时出现数组索引分配错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33403464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com