0
public class AssignmentChapter8
{
    public static void main(String[] args)
    {
        int oddNumbers[] = new int[100];
        int evenNumbers[] = new int[100]; 
        int counter = 0;
        int x = 0;
        int y = 0;
        int placeholder;

        while(counter < 100)
        {
            placeholder = (int)(Math.random() * 25);

            if(placeholder % 2 > 0)
            {
                oddNumbers[x] = placeholder;
                x++;
            }
            else
            {
                evenNumbers[y] = placeholder;
                y++;
            }
        }   

        System.out.println("The odd numbers are:");

        for(int k = 0; k < 100; k++)
            System.out.print("\t" + oddNumbers[k]);

        System.out.println("The even numbers are:");

        for(int l = 0; l < 100; l++)
            System.out.print("\t" + evenNumbers[l]);
    }
}

私は最近Javaを開始し、100個のランダムな整数を生成するプログラムを作成し、それらを偶数と奇数にソートして配列を介して表示しようとしています。上記のコードをコンパイルできますが、実行できません。Out Of Bounds Exception を頻繁に受け取ります。どんな助けでも大歓迎です。

4

2 に答える 2

0

カウンターを増やしていないため、本質的に無限ループが進行しています。最終的に、x または y が 100 になり、配列のサイズ (oddNumbers または evenNumbers) の範囲外の例外が発生します。

counter++;while ループ内のどこかに行を追加する必要があります。

于 2013-07-08T19:43:17.840 に答える
0

行う必要がある小さな調整は次のとおりです (無限ループの修正に加えて):

public class AssignmentChapter8
{
    public static void main(String[] args)
    {
        int oddNumbers[] = new int[100];
        int evenNumbers[] = new int[100]; 
        int counter = 0;
        int x = 0;
        int y = 0;
        int placeholder;

        while(counter < 100)
        {
            placeholder = (int)(Math.random() * 25);

            if(placeholder % 2 > 0)
            {
                oddNumbers[x] = placeholder;
                x++;
            }
            else
            {
                evenNumbers[y] = placeholder;
                y++;
            }
            // Change 1:
            counter++;
        }   

        System.out.println("The odd numbers are:");
        // change 2:
        for(int k = 0; k < x; k++)
            System.out.print("\t" + oddNumbers[k]);

        System.out.println("The even numbers are:");
        // change 2:
        for(int l = 0; l < y; l++)
            System.out.print("\t" + evenNumbers[l]);
    }
}

最初の変更: カウンターをインクリメントしていなかったため、無限ループが発生しました (x または y のいずれかを 100 を超えると、配列があふれ出してしまいます)。

2 番目の変更: 残りの配列はデフォルトでゼロに初期化されますが、for ループが偶数/奇数のリストの最後で停止し、x が奇数の数を保持し、y が数を保持する場合は、おそらくより良いでしょう。したがって、for ループを 100 ではなく偶数で終了できます (これにより、リストの残りの長さに関係なく、長いゼロの連鎖が発生する可能性があります)。

于 2013-07-08T19:51:12.400 に答える