2011-01-16 4 views
0
public class GenericSort<G extends Comparable> { 
    private G[] integerarray; 
    public GenericSort(G[] inputarray){ 
     this.integerarray = inputarray; 
     //check empty array 
     if (integerarray ==null || integerarray.length==0){return;} 
     quickSort(0,integerarray.length-1); 
    } 

    public void quickSort(int low, int high){ 
     int i = low; 
     int j = high; 
     //set Pivot 
     G pivot = integerarray[low + (high-low)/2]; 
     while(i<=j){ 
     //check left 
     while(integerarray[i]<pivot){i++;} 
     //check right 
     while(pivot<integerarray[j]){j--;} 
     //swap 
     if(i<=j){ 
     G temp = integerarray[i]; 
     integerarray[i] = integerarray[j]; 
     integerarray[j] = temp; 
     i++; 
     j--; 
     } 
     } 
     //recursion 
     if(low<j){quickSort(low,j);} 
     if(i<high){quickSort(i,high);} 
    } 
} 

ici la ligne:Générique Trier- problème de comparision

while(integerarray[i]<pivot) { 
    i++; 
} & 

while(integerarray[i]<pivot){i++;} 

donne erreur car comarision n'est pas autorisé entre les types inconnus. Donc j'ai étendu G de comparable. Ne marche toujours pas. Comment le résoudre?

+1

formater le code s'il vous plaît. – Nishant

Répondre

4

< et > ne sont que pour les primitives. Si votre classe implémente Comparable, utiliser sa méthode compareTo et comparer le résultat à 0

+0

merci, ça marche mais ça donne un avertissement :: la méthode compareTo (Object) appartient au type brut Comparable.Reference au type générique Comparable doit être paramétré – Gopal

+0

@Gopal, essayez '>' au lieu de << G s'étend Comparable> ' – finnw

+0

Eh bien, cela fonctionne, s'il vous plaît expliquer la logique. – Gopal

2

La mise en œuvre Comparable ne vous permet pas d'utiliser les opérateurs de comparaison>, <, ==. Ce n'est pas C++, mec. :(

Au lieu de cela, vous devez utiliser la méthode compareTo() définie dans l'interface Comparable.

Et encore un autre commentaire. Pourriez-vous s'il vous plaît distinguer entre 2 choses absolument différentes comme « ne fonctionne pas » et « ne compile pas » Dans votre cas, vous ne pouvez pas compiler votre code.Quand votre code n'est pas compilé, vous n'avez pas besoin de publier un extrait de code aussi volumineux.Avec moins de texte et un petit extrait de code, vous avez plus de chance d'obtenir une bonne réponse. Bonne chance!

PS: vérifiez Collections.sort() comme référence. Nous essayons de mettre en œuvre.

+0

merci, ça marche mais ça donne un avertissement :: la méthode compareTo (Object) appartient au type brut Comparable.Reference au type Generic Comparable doit être paramétré – Gopal

2

vous ne pouvez pas comparer des objets avec des opérateurs comme <,> ou ==.
Comparable est une interface avec Précise la méthode compareTo (o Object)
Look here

+0

Vous pouvez réellement comparer des objets avec ==. Malheureusement, il fait généralement quelque chose de différent de ce que vous pensez qu'il fait :) – extraneon