Array Out Of Bounds异常

时间:2012-12-04 20:43:08

标签: java arrays

我在第57行得到了一个越​​界错误。任何帮助都表示赞赏。该程序采用1个整数并使用那么多索引创建和数组。它然后要求更多的整数来填补它。然后输出所有偶数并将其放入第二个数组,然后输出。

run:
Enter the ammount of integers you will require.
10
Enter your integers: 
1
Enter your integers: 
2
Enter your integers: 
3
Enter your integers: 
4
Enter your integers: 
5
Enter your integers: 
6
Enter your integers: 
7
Enter your integers: 
8
Enter your integers: 
9
Enter your integers: 
0
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at AllEven.arrcheck2(AllEven.java:57)
    at AllEven.main(AllEven.java:24)
Java Result: 1
BUILD SUCCESSFUL (total time: 4 seconds)

CODE

import java.util.*;

public class AllEven {

public static void main(String[] args) {
    int read;

    Scanner kybd = new Scanner(System.in);

    System.out.println("Enter the ammount of integers you will require.");

    read = kybd.nextInt();

    int[] arr1 = new int[read];
    int[] arr2;

    int count = 0;
    arrRead(arr1);
    arrcheck(arr1);

    arr2 = new int[count];

    arrcheck2(arr1, arr2);
    mainPrint(arr2);



}

public static int arrcheck(int[] arr1) {
    int count = 0;
    for (int i = 0; i < arr1.length; i++) {
        if (arr1[i] % 2 == 0) {
            count++;

        }

    }
    return count;
}

public static void arrRead(int[] arr1) {
    Scanner kybd = new Scanner(System.in);

    for (int i = 0; i < arr1.length; i++) {
        System.out.println("Enter your integers: ");
        arr1[i] = kybd.nextInt();

    }
}

public static void arrcheck2(int[] arr1, int[] arr2) {
    int j = 0;
    for (int i = 0; i < arr1.length; i++) {
        if (arr1[i] % 2 == 0) {
            arr2[j] = arr1[i];
            j++;

        }

    }

}

public static void mainPrint(int[] arr2) {
    for (int i = 0; i < arr2.length; i++) {
        System.out.println("Printing Even Numbers.");
        System.out.println(arr2[i]);
    }
}
}
好的,所以感谢所有帮助过的人,但是现在输入整数之后,程序就完成了,之后没有显示任何内容。

8 个答案:

答案 0 :(得分:2)

在创建arrcheck之前,您需要在count变量中指定arr2调用的返回值。否则,您将创建大小为0的arr2

更改: -

int count = 0;
arrRead(arr1);
arrcheck(arr1);

来: -

arrRead(arr1);
int count = arrcheck(arr1);

答案 1 :(得分:1)

对于初学者,你有arrcheck函数返回一个计数并且没有对它做任何事情。我怀疑你打算写这样的东西:

arrRead(arr1);
int count = arrcheck(arr1);

否则你的下一行:

arr2 = new int[count];

创建一个大小为0的数组,一旦访问它就会导致数组超出范围。

你拼写错误,我认为程序的其余部分应该适用于上述变化。

答案 2 :(得分:1)

在简要查看代码后,我认为您的问题就在于此处:

int count = 0;
arrRead(arr1);
arrcheck(arr1);

arr2 = new int[count]; //array of size 0!

arrcheck2(arr1, arr2);

答案 3 :(得分:1)

您将arr2定义为零长度数组:

int count = 0;
....
arr2 = new int[count];

然后,在arrcheck2中你有一行:

arr2[j] = arr1[i];

这不起作用,因为arr2没有长度,所以你不能把任何东西放进去。

答案 4 :(得分:1)

arr2的大小为0.因此,当您尝试访问其中的非现有索引时,您将获得异常。

答案 5 :(得分:1)

您创建一个长度为0的数组。

arr2 = new int[count];

你应该给它一个大于0的长度。 如果您希望它与arr1的长度相同,只需执行arr2 = new int[read];

答案 6 :(得分:1)

您需要将arr2初始化为与arr1相同的长度。 int count = read将解决问题。或者你可以完全删除计数,只需在初始化数组时使用read。

    read = kybd.nextInt();

    int[] arr1 = new int[read];
    int[] arr2;

    int count = read;
    arrRead(arr1);
    arrcheck(arr1);

    arr2 = new int[count];

答案 7 :(得分:1)

您没有初始化数组int[] arr2。您不应该使用数组来填充初始数组中的元素,因为数组在初始化时需要确定的大小 - 最好使用ArrayList,然后在知道确定大小后将其转换为数组,如果您必须的。