このプログラムでは、mergeSort を使用してオリンピック メダルを並べ替えています。
java.lang.ArrayIndexOutOfBoundsException が返されることもあれば、返されないこともあるため、コードに少し問題があるようです。
少し背景を説明するには:
オリンピックの国とそのメダルをスコアボードでランダムに生成する方法があります。結果の String[] 配列を次の形式で返します。
缶 1 1 1
アメリカ 1 1 2
GBR 0 0 1
チャンネル 0 0 2
ただし、スコアボードは、金、銀、銅のメダルを降順で整理する必要があります。したがって、次のようにする必要があります。
アメリカ 1 1 2
缶 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++;
}
}
}
このコードが正しく動作しない理由がわかりましたか? ありがとうございました!