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