在這個程序中,我使用mergeSort排序奧運獎牌。Java - 用字符串合併排序
有些東西似乎與我的代碼有點關閉,因爲有時它會給我一個java.lang.ArrayIndexOutOfBoundsException,有時它不會。
對於一個小的背景說明:
我有一個隨機生成奧運會的國家和他們的獎牌在記分牌贏的方法。返回結果的字符串[]陣列中的形式:
CAN 1 1 1
USA 1 1 2
GBR 0 0 1
CHN 0 0 2
但是,記分牌需要按照黃金,白銀和銅牌的降序進行組織。因此,它必須是這樣的:
美國1 1 2
CAN 111
CHN 0 0 2
GBR 0 0 1
使用bubblesort和quicksort對板進行排序工作正常,但mergesort不會n OT。有時它會很好,但更多的時候它會給我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++;
}
}
}
任何想法,爲什麼這個代碼不能正常工作?謝謝!
什麼線做的堆棧跟蹤點嗎? – CodeChimp 2013-04-09 11:25:11
一些方面的評論:Java中的方法和變量通常是'camelCase'。類通常是沒有下劃線的「TitleCase」。 – 2013-04-09 12:11:36
你爲什麼重新發明輪子?你爲什麼要合併排序?它是不是最重要的東西,它是排序?我會使用Array.sort()。 – Bohemian 2013-04-09 12:14:14