我需要帮助解决此错误:
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] + " ");
}
}
答案 0 :(得分:3)
异常的原因是您没有将括号放在if
条件的主体周围。应该是这样的:
for(int i = 0; i <= 99; i++)
{
if (input[i] % 2 != 0){
odd[j] = input[i];
j++;
}
}
现在,你实际做的是每次循环增加j
,而不是每次都有奇数。因此,当input
中的至少一个值不奇怪时,您将获得此异常,因为odd
数组的大小将小于input
的大小。