Java - 为什么在一个 运行 上抛出异常而在另一个上不抛出异常?
Java - Why an exception is thrown on one run and doesn't on another ??
我正在使用快速排序算法对数组列表进行排序,这是我在 QuickSort.java 中的代码:
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 ;
}
}
主要 class :
// 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 是每个 运行 随机生成的数组列表,但大小固定为 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
构建失败(总时间: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);
为什么会发生这种情况,我该如何解决??
原因是我没有对{j --;}进行限制
所以它有时会继续递减为 -1
将其更改为后现在可以使用了:
do {j--;} while (j>=0 && data.get(j)> pivot);
我正在使用快速排序算法对数组列表进行排序,这是我在 QuickSort.java 中的代码:
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 ;
}
}
主要 class :
// 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 是每个 运行 随机生成的数组列表,但大小固定为 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 构建失败(总时间: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);
为什么会发生这种情况,我该如何解决??
原因是我没有对{j --;}进行限制
所以它有时会继续递减为 -1
将其更改为后现在可以使用了:
do {j--;} while (j>=0 && data.get(j)> pivot);