-5

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

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

7 回答 7

4

的 for 循环是罪魁祸首。条件不应该有<=,而只是<

代替: -

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

和: -

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

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

于 2013-01-04T19:26:10.733 回答
1

此行导致错误

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

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

通过做 x <= randomNum.length;

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

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

于 2013-01-04T19:26:19.913 回答
1

错误在这里:

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

您应该将其更改为:

for (int x = 0; x < randomNum.length; x++) {
于 2013-01-04T19:26:23.877 回答
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 搜索可以让您了解错误以及如何修复它。然后,一旦您可以运行程序,请检查您的输出与所需的输出并进行相应的更改。对于更复杂的错误,您必须自己调试,因为代码会更长,其他人也更难理解。祝你好运!

于 2013-01-04T19:52:04.957 回答
0

您在循环中使用 <= 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]);
}

更进一步,你的功能都搞砸了,你永远不会填满你的奇数数组和偶数数组。此外,您不需要三个循环,您可以合而为一。

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

于 2013-01-04T19:27:18.347 回答
0

这是你的错误:

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

它应该是

for ( int x = 0; x < randomNum.length; x++ )
于 2013-01-04T19:27:22.823 回答
0

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

于 2013-01-04T19:27:25.957 回答