2017-11-01 4 views
1
class BubbleSort<T> extends ArraySort<T> 
{ 
    public void iSort(T[] inArray) { 
     int n = inArray.length; 
     int k; 
     for (int m = n; m >= 0; m--) { 
      for (int i = 0; i < n - 1; i++) { 
       k = i + 1; 
       if (compare(inArray[i], inArray[k])) { 
        T temp; 
        temp = inArray[i]; 
        inArray[i] = inArray[k]; 
        inArray[k] = temp; 
       } 
      } 
     } 
     print(inArray); 
    } 
    public static <T extends Comparable<T>> boolean compare(T a, T b) { 
     if (a.compareTo(b) > 0) { 
      return true; 
     } return false; 
    } 

Ich bekomme (T extends comparable <T>, T extends comparable <T>) in the type bubblesort<T> is not applicable for the arguments (T,T) Fehler!Fehler beim Vergleich zweier Elemente (Java)!

Die schnelle Lösung sagt mir, Methode compare(T,T)<T> zu compare(T,T) zu ändern, aber das würde mein Problem nicht lösen. Es funktioniert einwandfrei, wenn ich den tatsächlichen Wert von Elementen, z. B. compare(3, 5) oder compare("hi", "hello") anstelle von compare(inArray[i], inArray[k]) eingeben.

Ich würde es sehr schätzen, wenn jemand erklären könnte, warum es das tut und mir eine Lösung gibt.

Antwort

1

Sie haben bereits definiert Ihre Klasse mit einem generischen Typ T, also gibt es keinen Punkt ein separates für das Verfahren erklärt:

class BubbleSort<T extends Comparable<T>> extends ArraySort<T> { 
    public void iSort(T[] inArray) { 
     int n = inArray.length; 
     int k; 
     for (int m = n; m >= 0; m--) { 
      for (int i = 0; i < n - 1; i++) { 
       k = i + 1; 
       if (compare(inArray[i], inArray[k])) { 
        T temp; 
        temp = inArray[i]; 
        inArray[i] = inArray[k]; 
        inArray[k] = temp; 
       } 
      } 
     } 
     print(inArray); 
    } 

    public static boolean compare(T a, T b) { 
     if (a.compareTo(b) > 0) { 
      return true; 
     } 

     return false; 
    } 
} 

Wie dem auch sei, Sie T extends Comparable<T> in der Klassendeklaration bezeichnen sollte, anstatt in die Methode.

+2

Heilige s # $% danke! Ich wollte mir gerade die Haare ausreißen, weil ich wusste, dass ich mich irgendwo umziehen musste, aber ich konnte es sowieso nicht herausfinden. Wir wurden nicht gut in Generika unterrichtet, so dass das einzige Beispiel, das ich hatte, war, dass es in einer Methode vergleichbar ist, so dass ich nicht wusste, dass du es in der Klassendeklaration tun könntest ... –

+1

Gern geschehen! –

+1

Fühlen Sie sich frei, zu antworten/die Antwort zu akzeptieren, wenn Ihr Problem gelöst wurde! –