public class Sorting<T>{
private Comparator <T> genericComparator;
public ArrayList<T> array;
public Sorting (Comparator<T> TypeComparator) {
this.genericComparator= TypeComparator;
}
void MergeSort(int low, int high){
if (low < high) {
int mid = (low + high)/2;
MergeSort(low, mid);
MergeSort(mid + 1, high);
Merge(low, mid, high);
}
}
void Merge(int low, int mid, int high) {
ArrayList<T> b = new ArrayList <T>();
int h = low, i = low, j = mid+1, k;
while ((h <= mid) && (j <= high)) {
if (genericComparator.compare(array.get(h), array.get(j))<=0) {
b.set(i, array.get(h)); h++; }
else { b.set(i, array.get(j)); j++; }
i++;
}
if (h > mid) {
for (k=j; k<=high; k++) {
b.set(i, array.get(k)); i++; }
}
else {
for (k=h; k<=mid; k++) {
b.set(i, array.get(k)); i++;
}
}
for (k=low; k<=high; k++)
array.set(k, b.get(k));
}
Hallo, ich habe dieses generische MergeSort geschrieben, aber es gibt mir immer "ArrayList rangecheck error".Generic MergeSort
PS: dies ist der Vergleicher:
public class StringComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
}
Und das ist die Haupt i verwendet:
public class prova {
public static void main(String[] args) {
ArrayList<String> string = new ArrayList <String>();
string.add("Alberto");
string.add("Ermanno");
string.add("Francesco");
string.add("Carlo");
string.add("Betta");
string.add("Herald");
string.add("Daniela");
string.add("Giotto");
Sorting<String> sisi = new Sorting<String> (new StringComparator());
sisi.array = string;
System.out.println (sisi.array);
sisi.MergeSort(0, sisi.array.size()-1);
System.out.println (sisi.array);
}
}
Könnten Sie bitte mit ihm, was falsch zu verstehen helfen?
Können Sie den Fehler Stacktrace posten und angeben, wo in Ihrem Code der Fehler herkommt? – cyroxis
Ausnahme im Thread "Haupt" [Alberto, Ermanno, Francesco, Carlo, Betta, Herald, Daniela, Giotto] java.lang.IndexOutOfBoundsException: Index: 0, Größe: 0 \t bei java.util.ArrayList.rangeCheck (unbekannt Source) \t bei java.util.ArrayList.set (Unknown Source) \t bei Sort.Sorting.Merge (Sorting.java:107) \t bei Sort.Sorting.MergeSort (Sorting.java:92) \t in Sort .Sorting.MergeSort (Sorting.java:89) \t bei Sort.Sorting.MergeSort (Sorting.java:89) \t bei Sort.prova.main (prova.java:37) Sorry, b ut Fehler Zeilen sind falsch (ich habe andere generische Sortiermethoden in meinem Haupt) – user3004162