我在第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]);
}
}
}
好的,所以感谢所有帮助过的人,但是现在输入整数之后,程序就完成了,之后没有显示任何内容。
答案 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
,然后在知道确定大小后将其转换为数组,如果您必须的。