2016-04-12 4 views
1

Je suis novice en Java et j'essaye d'organiser une liste de termes dans l'ordre alphabétique. (Un terme est défini comme char et un int) (par exemple {Term('Z',4),Term('C',3),Term('Q',2) ...})Classement par ordre alphabétique

Mon code est le suivant:

public Term nextElement() 
{ 
    Term max = terms.get(0); 
    char maxtest = max.getElement(); 
    for (int i = 1; i < terms.size(); i++){ 
     Term tester = terms.get(i); 
     char maxtest2 = tester.getElement(); 
     if (maxtest2 > maxtest) { 
      tester = max; 
     } 
    } 
    return max; 
} 

Pourquoi est-ce pas de travail et comment puis-je accomplir cette Mon arrayList est? appelé terme rempli avec le type terme

Répondre

2

Votre problème avec cette ligne de code. Votre classe n'est pas un Type de Comparable Alors, Sur quelle propriété ou critère compareTo() méthode va compare ces deux objets ???

res = maxtest.compareTo(maxtest2); //Your maxtest object is not Comparable Type. 

Vous devez vous rendre votre classe Term de type Comparable. et, Remplacez la méthode compareTo() selon votre besoin. Vous n'avez pas mentionné la variable ou la structure de votre classe Term. Donc, je suppose que votre classe a ce genre de structure.

public class Term implements Comparable<Term> { 
    private Character alpha; 
    private int number; 
    //getter and setters +Constructors as you specified 
    .... 
    .... 
    ... 
     ..... 
// Now Set a criteria to sort is the Alphanumeric. 
    @Override 
    public int compareTo(Term prm_obj) { 
     if (prm_obj.getAlpha() > this.alpha) { 
      return 1; 
     } else if (prm_obj.getAlpha() < this.alpha) { 
      return -1; 

     } else { 
      return 0; 
     } 

    } 

Maintenant votre classe devient un type comparable. Donc, vous pouvez appliquer Collections.sort(Collection obj) qui automatiquement sort votre ArrayList<Term>.

Ici, j'écris une démo pour cela.

public static void main(String... args){ 

    List<Term> obj_listTerm = new ArrayList<>(); 
    //add all the data you given in question 
    obj_listTerm .add(new Term('Z', 4)); 
    obj_listTerm .add(new Term('Q', 2)); 
    obj_listTerm .add(new Term('c', 3)); 

    // print without Sorting your Term ArrayList. 
    System.out.println("This is the list unsorted: " + myTermList); 
    // Sort Using Collections.sort() Method. 

    Collections.sort(myTermList); 

    // After applying sort() you may see your Sorted ArrayList. 
    System.out.println("This is the list SORTED: " + myTermList); 
} 
+1

Got it :) Merci! – Alfred

0

vous pouvez utiliser la classe de collecte et trier la liste des termes que vous avez, il vous suffit de rendre le terme de classe comparable

Exemple :

public class Term implements Comparable<Term> { 
    ..... 
    // ..... 
    // criteria to sort is the char 
    @Override 
    public int compareTo(Term o) { 
     if (o.getLetter()> this.letter) { 
      return 1; 
     } else if (o.getLetter() < this.letter) { 
      return -1; 

     } else { 
      return 0; 
     } 

    } 

public static void main(String[] args) { 
    // test 
    List<Term> myTermList = new ArrayList<>(); 
    myTermList.add(new Term('Z', 4)); 
    myTermList.add(new Term('Q', 2)); 
    myTermList.add(new Term('c', 3)); 
    // check how the look like 
    System.out.println("This is the list unsorted: " + myTermList); 
    // now sort them 
    Collections.sort(myTermList); 
    // check how the look like 
    System.out.println("This is the list SORTED: " + myTermList); 
} 

Edition>

si vous ne voulez pas mettre en œuvre comparable modifier par la suite:

res = maxtest.compareTo(maxtest2); 

parce que ce n'est pas valable depuis maxtest et maxtest2 sont primitives et pas d'objets ...

utiliser à la place

res = Character.compare(maxtest, maxtest2); 

puis utiliser le résultat pour vérifier votre logique et prendre des décisions:

if (res >1) { 
      System.out.println("bigger"); 

     }else if (res<1) { 
      System.out.println("smaller"); 

     }else { 
      System.out.println("same"); 

     } 
+0

Pour ce faire, dois-je faire une autre classe - ou simplement en importer une? – Alfred

+0

vous pouvez tout faire dans la même classe –

+0

il suffit d'ajouter à la classe Term les outils comparables