2016-04-12 457 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可比较