首页 文章

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

提问于
浏览
0

我收到一个错误,我不明白原因 . 我正在尝试使用 Scanner 方法获取用户输入,以便为数组的索引赋值 . 允许用户保持 - 继续 - 将值输入到数组编号中,但是,如果用户决定停止,则输入 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();
        }
    }

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

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

UPDATES

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语句坏代码设计的条件?

1 回答

  • 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

相关问题