0
私はArrayListのをソートするクイックソートアルゴリズムを使用していますし、これはQuickSort.javaで私のコードです:Java - 1回の実行で例外がスローされ、別の実行で例外が発生するのはなぜですか?
public class QuickSort {
public ArrayList<Integer> quickSort(ArrayList<Integer> data , int low , int high){
ArrayList<Integer> sortedData = new ArrayList<Integer>();
if(low< high) {
int pivotIndex = low; // Assume first element is the pivot
int pivot = data.get(low);// The pivot value
data.set(pivotIndex, data.get(high));// Swap pivot with last item
data.set(high, pivot);
int i = low - 1;
int j = high;
do {
do {i++;} while (data.get(i)< pivot);
do {j--;} while (data.get(j)> pivot); //line 35
if (i < j) {
int temp = data.get(i);
data.set(i, data.get(j));
data.set(j, temp);
}
} while (i < j);
data.set(high, data.get(i)); // Put the pivot back in the middle
data.set(i, pivot);
quickSort(data, low, i - 1);// Recursive sort left list
quickSort(data, i + 1 ,high);// Recursive sort right list
}
sortedData = data;
return sortedData ;
}
}
とメインクラスで:
// sort random data with quick sort
QuickSort q = new QuickSort();
ArrayList<Integer> quickSortedD = new ArrayList<Integer>();
System.out.println("randomD before q s "+ randomD);
int low = 0;
int high = randomD.size() -1 ;
System.out.println("high : " + high);
quickSortedD = q.quickSort(randomD ,low, high); // low is the first element and high is the last element in the arraylist
System.out.println("quickSortedD" + quickSortedD);
randomDはランダムに生成されていますArrayListのですそれぞれのランで、固定サイズ1500である。
問題は次のとおりです。ファイルを実行すると例外がスローされ、時には正常に構築されることがあります。
スローされた例外:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(ArrayList.java:422)
at java.util.ArrayList.get(ArrayList.java:435)
at sortingtechniques.QuickSort.quickSort(QuickSort.java:35)
at sortingtechniques.QuickSort.quickSort(QuickSort.java:48)
at sortingtechniques.QuickSort.quickSort(QuickSort.java:48)
at sortingtechniques.QuickSort.quickSort(QuickSort.java:48)
at sortingtechniques.QuickSort.quickSort(QuickSort.java:48)
at sortingtechniques.QuickSort.quickSort(QuickSort.java:48)
at sortingtechniques.QuickSort.quickSort(QuickSort.java:48)
at sortingtechniques.QuickSort.quickSort(QuickSort.java:48)
at sortingtechniques.QuickSort.quickSort(QuickSort.java:48)
at sortingtechniques.QuickSort.quickSort(QuickSort.java:48)
at sortingtechniques.QuickSort.quickSort(QuickSort.java:48)
at sortingtechniques.QuickSort.quickSort(QuickSort.java:48)
at sortingtechniques.SortingTechniques.main(SortingTechniques.java:104)
/home/gfdg/.cache/netbeans/8.2/executor-snippets/run.xml:53:Javaが返さ:1 BUILD FAILED(合計時間:0秒)
QuickSort.java:35:
do {j--;} while (data.get(j)> pivot);
QuickSort.java:48:
quickSort(data, low, i - 1);// Recursive sort left list
SortingTechniques.java:104:
quickSortedD = q.quickSort(randomD ,low, high);
このエラーが発生する理由とどのように私はそれを修正できますか?
デバッガを使用します。何が起こるか見る。あなたがそれを確認していないので、簡単に否定に行くことができます。それは問題を引き起こすでしょう。 –
それは^^^のように見えます: "ArrayIndexOutOfBoundsException:-1" – Jeutnarg
http://www.vogella.com/tutorials/JavaAlgorithmsQuicksort/article.html –