【发布时间】:2013-03-31 19:05:39
【问题描述】:
在这个程序中,我正在使用 mergeSort 对奥运奖牌进行排序。
我的代码似乎有点不对劲,因为有时它会给我一个 java.lang.ArrayIndexOutOfBoundsException ,有时它不会。
一些背景说明:
我有一种方法可以在记分牌中随机生成奥运国家及其获得的奖牌。以如下形式返回一个 String[] 结果数组:
CAN 1 1 1
美国 1 1 2
GBR 0 0 1
中国 0 0 2
但是,记分牌需要按照金牌、银牌和铜牌的递减顺序排列。所以它必须是这样的:
美国 1 1 2
CAN 1 1 1
中国 0 0 2
GBR 0 0 1
使用冒泡排序和快速排序对棋盘进行排序可以正常工作,但归并排序不行。有时它会很好,但更多时候它会给我 ArrayIndexOutOfBoundsException。
public static void main(String[] args) {
Olympic_Results score = new Olympic_Results();
//print a return value of an array
String[] countries = score.OlympicResult(7); //input how many game results
mergeSort(countries, 0, countries.length - 1);
for (String value:countries)
System.out.println(value);
}
public static void mergeSort(String array[], int lo, int n) {
int low = lo;
int high = n;
if (low >= high) {
return;
}
int middle = (low + high) / 2;
mergeSort(array, low, middle);
mergeSort(array, middle + 1, high);
int end_low = middle;
int start_high = middle + 1;
while ((lo <= end_low) && (start_high <= high)) {
if ((array[low].substring(4,8)).compareTo(array[high].substring(4,8)) > 0) {
low++;
}
else {
String Temp = array[start_high];
for (int k = start_high - 1; k >= low; k--) {
array[k + 1] = array[k];
}
array[low] = Temp;
low++;
end_low++;
start_high++;
}
}
}
知道为什么这段代码不能正常工作吗?谢谢!
【问题讨论】:
-
堆栈跟踪也指向哪一行?
-
一些侧面cmets:Java中的方法和变量通常是
camelCase。类通常是TitleCase,不带下划线。 -
为什么要重新发明轮子?为什么要合并排序?最重要的不就是排序了吗?我会使用 Array.sort()。
-
@CodeChimp 我相信这是堆栈跟踪:线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 9(这个数字每次都会改变)在 main.mergeSort(main.java:58) at main.mergeSort(main.java:54) 在 main.main(main.java:33)
-
@Bohemian 我现在正在学习排序算法,所以我必须通过每个算法。
标签: java sorting merge mergesort indexoutofboundsexception