1

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

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

4 回答 4

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());
于 2013-10-24T14:56:52.633 回答
2

错误是因为

compareToIgnoreCase 返回非布尔值的 int 值。

返回负整数、零或正整数,因为指定的字符串大于、等于或小于此字符串,忽略大小写考虑。

如果只需要布尔值。

于 2013-10-24T15:00:50.957 回答
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
        //...
    }
}
于 2013-10-24T15:02:12.587 回答
0

我假设您的 clipArray 充满了支持 - 方法的对象getSurname()

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

if(foo.compareTo(bar) > 0)

于 2013-10-24T15:02:27.620 回答