2016-04-12 87 views
1

我是Java新手,我試圖按字母順序排列一個詞條數組列表。 (A項被定義爲char和一個int)(例如{Term('Z',4),Term('C',3),Term('Q',2) ...})按字母順序排列

我的代碼如下:

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; 
} 

爲什麼不是這個工作,我如何做到這一點 我的ArrayList是?名詞叫做填充型期限

回答

2

你的問題,這一行代碼。你的班級是不是Comparable類型所以,在哪個屬性或標準compareTo()方法將compare這兩個對象???

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

您必須使您的班級Term可比較的類型。並根據您的需要覆蓋方法compareTo()

你沒有提及你的班級的變量或結構Term。所以,我假設你的班級有這樣的結構。

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; 
     } 

    } 

現在您的班級成爲comparable類型。所以你可以申請Collections.sort(Collection obj),它自動地sort你的ArrayList<Term>

在這裏,我寫了一個演示。

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

知道了:)謝謝! – Alfred

0

您可以使用集合類和整理你有長期的名單,你只需要使課堂期限可比

例:

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); 
} 

編輯>

如果你不想實現可比然後修改這個:

res = maxtest.compareTo(maxtest2); 

,因爲這不是有效的,因爲maxtest和maxtest2是原語和不是物體...

改用

res = Character.compare(maxtest, maxtest2); 

,然後用結果來驗證你的邏輯,並做出決定:

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

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

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

     } 
+0

要做到這一點,我是否必須創建另一個類 - 或者只是導入一個類? – Alfred

+0

你可以在同一個班級做所有的事 –

+0

只需添加到Term類中implements可比較