0

システムが選択ソートを使用して 50,000 個の乱数の配列をソートするのにかかる時間を測定しようとしていますが、エラーが発生しています。私が受け取ったエラーは、null ポイントの例外です。誰かが私がここで間違っているところを見ますか

 import java.util.Random;

 public class SelectionSort {

public static void main(String[] args) {
    int arrayOne[] = null;
    int arr[] = { 9, 1, 8, 5, 7, -1, 6, 0, 2, 2718 };

    int arr1[] = fillArray(arrayOne);

    int sortedArr[] = selectionSort(arr1);
    System.out.println("Selection sort implemented below");
    System.currentTimeMillis();

    long start = System.currentTimeMillis();
    print(sortedArr);
    long elapsed = System.currentTimeMillis() - start;
    System.out.println(elapsed);

}

private static int[] fillArray(int[] array) {
    Random generator2 = new Random(System.currentTimeMillis());

    for (int x = 0; x < 50000; x++) {
        array[x] = generator2.nextInt();
    }
    return array;
}

private static int[] selectionSort(int[] arr) {

    int minIndex, tmp;
    int n = arr.length;
    for (int i = 0; i < n - 1; i++) {
        minIndex = i;
        for (int j = i + 1; j < n; j++)
            if (arr[j] < arr[minIndex])
                minIndex = j;
        if (minIndex != i) {
            tmp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = tmp;
        }
    }
    return arr;

}

private static void print(int[] Array) {
    // TODO prints the array
    for (int i = 0; i < Array.length; i++)
        System.out.print(Array[i] + " ");
    System.out.println();
}
}
4

2 に答える 2

0

fillArray(arrayOne) を呼び出すと、パラメーターとして null が渡されます。次に、fillArray メソッドで、値を null 配列に入れようとしています。

ところで、デバッガーでコードを 1 行ずつ実行していれば、この問題を数秒で発見できたはずです。実際、スローされた例外でさえ、どの行に問題があるかを正確に示していたはずです。

于 2013-10-30T23:03:04.940 に答える
0

あなたは次のものを埋めようとしてarrayOneいますnull:

int arrayOne[] = null;

いっぱいにする前に、十分な容量で初期化する必要があります。

int arrayOne[] = new int[50000];
于 2013-10-30T23:03:06.993 に答える