按姓氏java排序对象数组

时间:2013-10-24 14:53:44

标签: java arrays sorting

我被困在下面这段代码中,我一直试图使用冒泡排序按姓氏对对象数组进行排序,然后将其打印出来。我哪里错了,怎么打印出来?这是我的代码

for(int i = 1; i < clipArray.length; i++) {
    for(int j = 0; j < clipArray.length; j++) {
        if(((clipArray[j].getSurname()).compareToIgnoreCase((clipArray[j+1].getSurname()))) {
            Clip temp = clipArray[j];
            clipArray[j] = clipArray[j+1];
            clipArray[j+1] = temp;
        }
    }
}

问题:必需布尔值,找到int

4 个答案:

答案 0 :(得分:2)

你的比较者课程

class SampleComparator implements Comparator<Clip> {
    @Override
    public int compare(Clip o1, Clip o2) {

           return o1.getSurname().compareToIgnoreCase(o2.getSurname());
   }
}

你在这里排序

Arrays.sort(clipArray,new SampleComparator());

答案 1 :(得分:2)

错误是因为

  

compareToIgnoreCase返回int值而不是布尔值。

     

返回负整数,零或正整数   指定的String大于,等于或小于此String,   忽视案例考虑。

如果只采用布尔值。

答案 2 :(得分:2)

问题是,String#compareToIgnoreCase会返回int,而boolean语句需要if结果。来自它的javadoc:

  

<强>返回

     

一个负整数,零或正整数,因为指定的String大于,等于或小于此String,忽略了大小写的注意事项

因此,根据定义将此方法的结果与另一个数字进行比较。

if (clipArray[j].getSurname().compareToIgnoreCase(clipArray[j+1].getSurname()) < 0) {
    //...
}

此外,您的for循环声明中还有另一个错误。它们应该是这样的:

for(int i = 1; i < clipArray.length; i++) {
    for(int j = 0; j < clipArray.length - 1; j++) { //spot the difference
        //...
    }
}

答案 3 :(得分:0)

我假设你的clipArray中填充了支持getSurname() - 方法的对象。

方法compareToIgnoreCase返回一个int,因此您应该将其与if语句中的值进行比较,例如

if(foo.compareTo(bar) > 0)