IndexOutOfBoundsException ...知道错误意味着什么但需要帮助调试?

时间:2013-01-04 19:25:02

标签: java

创建一个程序来生成随机数并将它们放在偶数或奇数数组中,但得到上面相同的错误信息?如果有人知道如何更好地格式化请帮助!

    import static java.lang.Math.*;
    import java.util.Random;


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

    for ( int x = 0; x <= randomNum.length; x++ )
    {
        randomNum [ x ] =  (int) (Math.random ( ) * 25 ); 
    }
    int sum = 0;
    int [ ] oddArray = new int [ 100 ] ;
    for ( int x = 0; x <= randomNum.length; x++ )
    {
        if (randomNum [ x ] % 2 != 0 )
            sum += oddArray [ x ];      

    }
    int sum2 = 0;
    int [ ] evenArray = new int [ 100 ] ;
    for ( int x = 0; x <= randomNum.length; x++ )
    {
        if (randomNum [ x ] % 2 == 0 )
            sum2 += evenArray [ x ] ; 
    }
    display ( oddArray );
    display1 ( evenArray );

}
public static void display ( int [ ] oddArray)
{
    System.out.println ( oddArray );
}
public static void display1 ( int [ ] evenArray )
{
    System.out.println ( evenArray );
}
    }

7 个答案:

答案 0 :(得分:4)

您的 for loops 是罪魁祸首。条件不应该是<=,而只是<

替换: -

for ( int x = 0; x <= randomNum.length; x++ )

: -

for ( int x = 0; x < randomNum.length; x++ )

因为您不想访问索引 - randomNum.length,因为它将是OutOfBounds

答案 1 :(得分:1)

此行导致错误

 for ( int x = 0; x <= randomNum.length; x++ )

在java数组索引从0开始,数组randomNum的索引从0到99. randomNum.length返回数组可以容纳的元素数,即100。

通过x <= randomNum.length;

在for循环中,您尝试访问数组中的第101个(randomNum [100])元素;哪个不存在,因此异常

所以替换for循环以包含for ( int x = 0; x < randomNum.length; x++ )

答案 2 :(得分:1)

错误在于:

for (int x = 0; x <= randomNum.length; x++) {

你应该把它改成:

for (int x = 0; x < randomNum.length; x++) {

答案 3 :(得分:0)

你在循环中使用&lt; = randomNum.length,它将从0到100。 你的数组randomNum确实启动它0,但它只有100个空格:它从0到99

将您的循环更改为: -

for (int x = 0; x < randomNum.length; x++) {

看一下,在你的“显示”功能中,你只能获得一个地址,你必须这样做

public static void display(int[] oddArray) {
    for(int i=0; i<oddArray.length;i++)
        System.out.println(oddArray[i]);
}

再往前看,你的功能全都搞砸了,你永远不会填补你的oddArray甚至是阵容。此外,您不需要三个循环,您可以在一个循环中完成。

我认为这是一个功课,所以我不会给你一个完整的工作代码,但祝你好运

答案 4 :(得分:0)

这是你的错误:

for ( int x = 0; x <= randomNum.length; x++ )

应该是

for ( int x = 0; x < randomNum.length; x++ )

答案 5 :(得分:0)

下次调试时,只需在循环上放置一个断点并在调试模式下运行它。然后,您可以在逐行运行时检查值。

答案 6 :(得分:0)

我找到了和其他人一样的修复程序。但是,我还注意到你打印出2个仅包含数字0的数组。你根本没有使用随机数来更新偶数或奇数数组。此外,两种显示方法是相同的。您不需要为每个方法使用单独的方法,因为您可以使用display方法打印出两个数组。这也适用于变量。只要您不再使用它,就可以重用相同的变量(就像我编写的代码中的index变量一样)。我更新了代码以简化它,并修复了您的所有错误,如下所示:

public class PrintOddAndEvenArrays {

public static void main(String[] args) {
    int[] randomNum = new int[500];

    for (int x = 0; x < randomNum.length; x++) {
        randomNum[x] = (int) (Math.random() * 25);
    }
    int index = 0;
    int[] oddArray = new int[100];
    for (int x = 0; x < randomNum.length; x++) {
        if(index == 100){
            break;
        }
        if (randomNum[x] % 2 != 0){
            oddArray[index] = randomNum[x];
            index++;
        }
    }
    index = 0;
    int[] evenArray = new int[100];
    for (int x = 0; x < randomNum.length; x++) {
        if(index == 100){
            break;
        }
        if (randomNum[x] % 2 == 0){
            evenArray[index] = randomNum[x];
            index++;
        }
    }
    display(oddArray);
    display(evenArray);

}

public static void display(int[] Array) {
    for(int a = 0; a < Array.length-1;a++){
        System.out.print(Array[a]+ ", ");
        if(a == Array.length-2){
            System.out.print(Array[a+1]);
        }
    }
    System.out.print("\n");
}

}

为了将来参考,要自己调试,控制台中打印出的错误通常会告诉您要引用哪行来修复错误。首先了解错误是什么以及如何解决它。通常,通过快速Google搜索,您可以了解错误以及如何解决错误。然后,一旦您可以运行程序,请使用所需的输出检查输出并相应地进行更改。对于更复杂的错误,您必须自己进行调试,因为代码会更长,而且对其他人来说更难以理解。祝你好运!