如何在迭代数组时使用compareTo

时间:2016-03-02 05:07:04

标签: java arrays comparable

在for循环中使用compareTo的正确方法是什么?我想在数组中按升序对Course个对象进行排序。我担心我insert()方法中循环中compareTo的正确语法。

if((array[i].courseNumber.compareTo(object.courseNumber)) <= 0) - 给我错误。

public class Courses implements Comparable{
    private String title;
    private int courseNumber;
    private Courses[] array;
    private int size;

    public Courses(String title, int courseNumber){
        this.title = title;
        this.courseNumber = courseNumber;
        this.array = new Courses[10];
        this.size = 0;
    }

    public void insert(String title, int courseNumber){
        Courses object = new Courses(title, courseNumber);
        if(size == 0){
            array[0] = object;
        }
        else{
            int i;
            for(i = 0; i < size; i++){
                if((array[i].courseNumber.compareTo(object.courseNumber)) <= 0)
                    //do STUFF
            }
        }

    }

    @Override
    public int compareTo(Object o) {
        if(o instanceof Courses){
            Courses obj1 = (Courses)o;

            return this.courseNumber - obj1.courseNumber;
        }
        return -1;
    }
}

2 个答案:

答案 0 :(得分:1)

if((array[i].courseNumber.compareTo(object.courseNumber)) <= 0)

由于courseNumber是基元(不是对象)而给出错误,因此没有定义compareTo方法。

如果您想使用该语法来比较整数,可以使用静态Integer.compare方法。

if(Integer.compare(array[i].courseNumber, object.courseNumber) <= 0)

如果您想使用定义的compareTo方法,请执行

if(array[i].compareTo(object) <= 0)) 

答案 1 :(得分:0)

提示:您没有将对象作为参数传递。

这如何比较两个对象?

for(i = 0; i < size; i++){
                if((array[i].courseNumber.compareTo(object.courseNumber)) <= 0)
                    //do STUFF
            }

您应该查看Arrays.sort(Object[]),它会使用Comparable界面对其进行排序。