-1

我在运行时遇到错误:“索引数组越界”,但我找不到在哪里。该程序假设采用 25 个随机数,将它们分成偶数和奇数并显示单独的组。我调试了第一个 for 语句很好,它是我的第二个,但我不知道为什么。我不能让两个数组元素彼此相等吗?

public class EvensandOdds {



 public static void main(String[] args)  {

    int i;
    int countEven = 0;
    int countOdd = 0;
    int num;
    int numEven = 0;
    int numOdd = 0;
    int [] evenNum;
    int [] oddNum;
    int [] ranNum = new int[25];


    for (i = 0; i <= 24; i++) {
        num = (int) (100 * Math.random());
        ranNum[i] = num;
        if (num % 2 == 0) {
            numEven += 1;
        } else numOdd += 1;
    }

    evenNum = new int[numEven];
    oddNum = new int [numOdd];

    for (i = 0; i <= 24; i++) {
        if (ranNum[i] % 2 == 0) {
            evenNum[countEven] = ranNum[i]; //This separates the two groups into different arrays. Is this a valid statement?
            countEven += 1;
        } else oddNum[countOdd] = ranNum[i];
        countOdd += 1;
    }

    System.out.print("Your even numbers are: \n");
    for (i = 0; i <= countEven; i++) {
        System.out.print(evenNum[i]);
    }

    System.out.print("Your odd numbers are: \n");
    for (i = 0; i <= countOdd; i++) {
        System.out.print(oddNum[i]);
    }



 }
}
4

3 回答 3

2
  1. countOdd += 1对偶数和奇数都执行,尝试更改这些行:

    } else oddNum[countOdd] = ranNum[i];
     countOdd += 1;
    

    进入:

    } else { 
        oddNum[countOdd] = ranNum[i];
        countOdd += 1; 
    }
    
  2. 改变(如狮子所建议的那样)

    for (i = 0; i <= countEven; i++) {
    

    for (i = 0; i <= countOdd; i++) {
    

    进入

    for (i = 0; i < countEven; i++) {
    

    for (i = 0; i < countOdd; i++) {
    
于 2013-06-18T23:05:06.250 回答
2

countOdd += 1;语句不在一对大括号内,因此即使数字是偶数也会执行。

} else { 
    oddNum[countOdd] = ranNum[i];
    countOdd += 1; 
}

这应该可以解决您的错误。

于 2013-06-18T23:06:35.003 回答
0

oddNum 数组长度为 8 ......但您使用更大的 countOdd ,这会导致在线上的异常:

oddNum[countOdd] = ranNum[i];

这个问题是因为 countOdd += 1; 不包含在括号中,例如:

else addNum[countOdd++] = ranNum[i];
于 2013-06-18T23:06:23.627 回答