1

我在第 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)

代码

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]);
    }
}
}

好的,感谢所有提供帮助的人,但是现在输入整数后,程序就完成了,之后没有显示任何内容。

4

8 回答 8

2

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

改变: -

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

至: -

arrRead(arr1);
int count = arrcheck(arr1);
于 2012-12-04T20:46:18.967 回答
1

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

于 2012-12-04T20:55:57.170 回答
1

对于初学者来说,你的arrcheck函数会返回一个计数而不用它做任何事情。我怀疑你打算写这样的东西:

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

否则你的下一行:

arr2 = new int[count];

创建一个大小为 0 的数组,一旦访问它就会导致数组越界。

你也拼错了金额,我认为程序的其余部分应该与上述更改一起使用。

于 2012-12-04T20:46:06.763 回答
1

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

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

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

arrcheck2(arr1, arr2);
于 2012-12-04T20:46:42.093 回答
1

您定义arr2为零长度数组:

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

然后,在arrcheck2你有一行:

arr2[j] = arr1[i];

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

于 2012-12-04T20:46:48.947 回答
1

arr2 的大小为 0。因此,当您尝试访问其中不存在的索引时,您会遇到异常。

于 2012-12-04T20:46:57.497 回答
1

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

arr2 = new int[count];

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

于 2012-12-04T20:47:06.317 回答
1

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

    read = kybd.nextInt();

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

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

    arr2 = new int[count];
于 2012-12-04T20:47:49.437 回答