簡體   English   中英

按字母順序排列

[英]Arranging by Alphabetical Order

我是Java的新手,正在嘗試按字母順序排列術語的arrayList。 (術語定義為字符和整數)(例如{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稱為用Term類型填充的term

您在這行代碼中遇到的問題。 您的類不是可Comparable的類型,因此,在哪個屬性或條件上compareTo()方法將compare這兩個對象?

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

您必須使您的類Term Comparable類型。 和根據您的需要重寫compareTo()方法。

您沒有提到Term類的變量或結構。 因此,我假設您的班級有這種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;
        }

    }

現在,您的班級成為可comparable類型。 因此,您可以應用Collections.sort(Collection obj) ,它會自動sort ArrayList<Term> sort

在這里,我為此編寫了一個演示。

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

您可以使用Collection類並對您擁有的術語列表進行排序,只需使Term類具有可比性

例:

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

        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM