-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 ループでは、配列内の 101 番目 (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

ループで <= 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 と evenArray を埋めることはありません。また、3 つのループは必要なく、すべて 1 つにまとめて実行できます。

これは宿題だと思うので、完全に機能するコードは提供しませんが、頑張ってください

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

他のみんなと同じ修正を見つけました。ただし、数値 0 のみを含む 2 つの配列を出力していることにも気付きました。偶数または奇数の配列を更新するために乱数をまったく使用していませんでした。また、2 つの表示方法は同じです。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 に答える