按字母顺序排列



我是Java新手,正在尝试按字母顺序排列术语的arrayList。(术语定义为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被称为term,填充类型为Term

这行代码的问题。您的类不是Comparable的类型,那么,在哪个属性或条件下,compareTo()方法将compare这两个对象???

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

您必须使类Term成为Comparable类型。以及,根据需要覆盖方法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),它会自动为您的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");
        }

最新更新