1

57行目で境界外エラーが発生しました。助けていただければ幸いです。プログラムは1つの整数を取り、その数のインデックスを持つ配列を作成します。次に、それを埋めるためにさらに整数を要求します。次に、すべての偶数を取得し、それを 2 番目の配列に配置して出力します。

run:
Enter the ammount of integers you will require.
10
Enter your integers: 
1
Enter your integers: 
2
Enter your integers: 
3
Enter your integers: 
4
Enter your integers: 
5
Enter your integers: 
6
Enter your integers: 
7
Enter your integers: 
8
Enter your integers: 
9
Enter your integers: 
0
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at AllEven.arrcheck2(AllEven.java:57)
    at AllEven.main(AllEven.java:24)
Java Result: 1
BUILD SUCCESSFUL (total time: 4 seconds)

コード

import java.util.*;

public class AllEven {

public static void main(String[] args) {
    int read;

    Scanner kybd = new Scanner(System.in);

    System.out.println("Enter the ammount of integers you will require.");

    read = kybd.nextInt();

    int[] arr1 = new int[read];
    int[] arr2;

    int count = 0;
    arrRead(arr1);
    arrcheck(arr1);

    arr2 = new int[count];

    arrcheck2(arr1, arr2);
    mainPrint(arr2);



}

public static int arrcheck(int[] arr1) {
    int count = 0;
    for (int i = 0; i < arr1.length; i++) {
        if (arr1[i] % 2 == 0) {
            count++;

        }

    }
    return count;
}

public static void arrRead(int[] arr1) {
    Scanner kybd = new Scanner(System.in);

    for (int i = 0; i < arr1.length; i++) {
        System.out.println("Enter your integers: ");
        arr1[i] = kybd.nextInt();

    }
}

public static void arrcheck2(int[] arr1, int[] arr2) {
    int j = 0;
    for (int i = 0; i < arr1.length; i++) {
        if (arr1[i] % 2 == 0) {
            arr2[j] = arr1[i];
            j++;

        }

    }

}

public static void mainPrint(int[] arr2) {
    for (int i = 0; i < arr2.length; i++) {
        System.out.println("Printing Even Numbers.");
        System.out.println(arr2[i]);
    }
}
}

助けてくれたみんなに感謝しますが、整数が入力された後、プログラムは何も表示せずに終了します。

4

8 に答える 8

2

arrcheckを作成する前に、呼び出しの戻り値を count 変数に割り当てる必要がありますarr2。それ以外の場合は、arr2サイズ 0 で作成します。

変化: -

int count = 0;
arrRead(arr1);
arrcheck(arr1);

に: -

arrRead(arr1);
int count = arrcheck(arr1);
于 2012-12-04T20:46:18.967 に答える
1

配列を初期化していませんint[] arr2。配列は初期化時に決定されたサイズを必要とするため、初期配列から偶数要素を移入するために配列を使用しArrayListないでください。必要に応じて、最終的なサイズがわかったら、配列を使用してから配列に変換することをお勧めします。

于 2012-12-04T20:55:57.170 に答える
1

まず、arrcheck関数がカウントを返し、それに対して何もしないようにします。私はあなたが次のようなことを書くつもりだったと思います:

arrRead(arr1);
int count = arrcheck(arr1);

それ以外の場合は、次の行:

arr2 = new int[count];

サイズ 0 の配列を作成すると、アクセスされるとすぐに配列が範囲外になります。

また、Amount のスペルが間違っています。プログラムの残りの部分は上記の変更で機能するはずです。

于 2012-12-04T20:46:06.763 に答える
1

コードを簡単に見てから、問題はここにあると思います:

int count = 0;
arrRead(arr1);
arrcheck(arr1);

arr2 = new int[count]; //array of size 0!

arrcheck2(arr1, arr2);
于 2012-12-04T20:46:42.093 に答える
1

arr2長さゼロの配列として定義しています:

int count = 0;
....
arr2 = new int[count];

次に、arrcheck2次の行があります。

arr2[j] = arr1[i];

arr2長さがなく、何も入れることができないため、これは機能しません。

于 2012-12-04T20:46:48.947 に答える
1

arr2 のサイズは 0 です。したがって、存在しないインデックスにアクセスしようとすると、例外が発生します。

于 2012-12-04T20:46:57.497 に答える
1

長さ 0 の配列を作成します。

arr2 = new int[count];

0 より大きい長さを指定する必要があります。arr1 と同じ長さにするには、次のようにします。arr2 = new int[read];

于 2012-12-04T20:47:06.317 に答える
1

arr2 を arr1 と同じ長さに初期化する必要があります。int count = read で問題が解決します。または、count を完全に削除して、配列の初期化時に read を使用することもできます。

    read = kybd.nextInt();

    int[] arr1 = new int[read];
    int[] arr2;

    int count = read;
    arrRead(arr1);
    arrcheck(arr1);

    arr2 = new int[count];
于 2012-12-04T20:47:49.437 に答える