2017-06-06 52 views
0

好的。我有一個標準的mergesort類。重寫不工作的方法

public class Merge extends SortAlgorithm { 

public static void sort(Comparable[] a) { 
    Comparable[] aux = new Comparable[a.length]; 
    sort(a, aux, 0, a.length -1); 
} 

protected static void sort(Comparable[] a, Comparable[] aux, int lo, int hi) { 
    if(hi <= lo) 
     return; 
    int mid = (lo + hi)/2; 
    sort(a, aux, lo, mid); 
    sort(a, aux, mid+1, hi); 
    if(less(a[mid+1], a[mid])) 
     merge(a, aux, lo, mid, hi); 
} 

public static void main(String[] args) throws IOException { 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    String[] a = br.readLine().split(" "); 
    sort(a); 
    show(a); 
} 

protected static void merge(Comparable[] a, Comparable[] aux, int lo, int mid, int hi) { 
    int i = lo , j = mid+1; 
    for(int k = lo ; k <= hi ; k++) 
     aux[k] = a[k]; 
    for(int k = lo ; k <= hi ; k++) { 
     if(i > mid)      //Boundary Conditions 
      a[k] = aux[j++];    // 
     else if(j > hi)     // 
      a[k] = aux[i++];    // 
     else if(less(aux[i] , aux[j])) 
      a[k] = aux[i++]; 
     else 
      a[k] = aux[j++]; 
    } 
} 

} 

我已經擴展這個類來創建使用較少數量的輔助數組的mergesort的較新版本。它有不同的「合併」和「排序(可比[])」功能

public class MergeSmallerAuxArray extends Merge { 

public static void sort(Comparable[] a) { 
    Comparable[] aux = new Comparable[a.length/2]; 
    sort(a, aux, 0, a.length - 1); 
} 

public static void main(String[] args) throws IOException { 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    String[] a = br.readLine().split(" "); 
    sort(a); 
    show(a); 
} 
//method overidden below 
public static void merge(Comparable[] a, Comparable[] aux, int lo, int mid, int hi) {  int i = lo , j = mid+1; 
    for(int k = lo ; k <= mid ; k++) 
     aux[k] = a[k]; 
    for(int k = lo ; k <= hi ; k++) { 
     if(i > mid) 
      a[k] = a[j++]; 
     else if(j > hi) 
      a[k] = aux[i++]; 
     else if(less(aux[i], a[j])) 
      a[k] = aux[i++]; 
     else 
      a[k] = a[j++]; 
    } 
} 

} 

但每次我運行這個類,因爲超類的sort(Comparable[],Comparable[],int,int)方法調用的合併功能,我得到一個錯誤超類,而不是我所重寫的那個。我哪裏錯了? 請幫助。 謝謝。

+2

可能的重複[爲什麼Java不允許重寫靜態方法?](https://stackoverflow.com/questions/2223386/why-doesnt-java-allow-overriding-of-static-methods) –

回答

4

這裏的問題是您使用static關鍵字。 static不適用於多態。

+0

謝謝很多 ! :) – AribAlam

+1

@AribAlam如果你對這個答案感到滿意,你應該接受它。這樣用戶就可以回答其他問題而不用回答已經解決的問題。 – Ishnark

+0

這不會解決問題,但我會補充說,一般來說,使用「@Override」告訴編譯器你想做什麼,讓他告訴你你的錯誤在哪裏 – Damien