错误:线程中的异常" main" java.lang.ArrayIndexOutOfBoundsException

时间:2017-11-25 01:03:00

标签: java arrays

我需要帮助解决此错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 54
    at Main.oddSort(Main.java:44)
    at Main.main(Main.java:19)

我明白发生此错误是因为我尝试在数组中分配太多值正确吗?我只是不知道如何解决它或为什么我做错了。

分配是生成100个随机数,并且一个接一个地调用两个不同的函数,将奇数和偶数分配到两个不同的数组中并显示它们。

以下是给我带来麻烦的部分:

public static int[] oddSort ( int input[] )
{
    int amountOfOdd = 0;
    int j = 0;

    for(int i = 0; i < input.length; i++)
    {
        if (input[i] % 2 != 0)
            amountOfOdd++;
    }

    int[] odd = new int[amountOfOdd];

    for(int i = 0; i <= 99; i++)
    {
        if (input[i] % 2 != 0)
            /*it's this line specifically that doesn't work, according to the debugger*/
            odd[j] = input[i];
            j++;
    }
    return odd;
}

这是完整的事情:

public class Main
{
    public static void main(String[] args)
    {
        int[] numbers = new int[100];

        for(int i = 0; i < numbers.length-1; i++)
            numbers[i] = (int)(Math.random() * 26);

        int[] odd = oddSort(numbers);
        int[] even= evenSort(numbers);

        System.out.println("The odd numbers are:");
        display( odd );
        System.out.println("The even number are:");
        display( even );
    }

    public static int[] oddSort ( int input[] )
    {
        int amountOfOdd = 0;
        int j = 0;

        for(int i = 0; i < input.length; i++)
        {
            if (input[i] % 2 != 0)
                amountOfOdd++;
        }

        int[] odd = new int[amountOfOdd];

        for(int i = 0; i <= 99; i++)
        {
            if (input[i] % 2 != 0)
                odd[j] = input[i];
                j++;
        }
    return odd;
    }

    public static int[] evenSort ( int input[] )
    {
        int amountOfEven = 0;
        int j = 0;

        for(int i = 0; i < input.length; i++)
        {
            if (input[i] % 2 != 0)
                amountOfEven++;
        }

        int[] even = new int[amountOfEven];

        for(int i = 0; i < input.length; i++)
        {
            if (input[i] % 2 != 0)
                even[j] = input[i];
                j++;
        }

    return even;
    }
    public static void display (int input[] )

    {
        for (int i = 0; i < input.length; i++)

            System.out.print(input[i] + " ");

    }
}

1 个答案:

答案 0 :(得分:3)

异常的原因是您没有将括号放在if条件的主体周围。应该是这样的:

for(int i = 0; i <= 99; i++)
{
    if (input[i] % 2 != 0){        
        odd[j] = input[i];
        j++;
    }
}

现在,你实际做的是每次循环增加j,而不是每次都有奇数。因此,当input中的至少一个值不奇怪时,您将获得此异常,因为odd数组的大小将小于input的大小。