-1

実行時に「インデックス配列が範囲外です」というエラーが表示されますが、どこにあるのかわかりません。このプログラムは、25 個の乱数を取り、それらを偶数と奇数に分けて、別々のグループを表示すると想定しています。最初の for ステートメントをデバッグしましたが、2 番目の for ステートメントは問題ありませんが、理由がわかりません。2 つの配列要素を互いに等しくすることはできませんか?

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 に答える