我有一个具有4个int字段的类。我想通过对字段的一些数学运算来对对象数组进行排序。我尝试了以下代码,但未发生排序。
class Cust1 implements Comparable<Cust1>{
int a;
int o;
int s;
int p;
@Override
public int compareTo(Cust1 b) {
if(this.a + this.s <= b.a + b.s)
{
return 1;
}
else {
return 0;
}
}
}
public class Test5 {
public static void main (String args[]) throws Exception
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
Cust1[] cust = new Cust1[n];
for(int i=0;i<n ;i++)
{
Cust1 a = new Cust1();
String[] str = br.readLine().split(" ");
a.a = Integer.parseInt(str[0]);
a.o = Integer.parseInt(str[1]);
a.s = Integer.parseInt(str[2]);
a.p = Integer.parseInt(str[3]);
cust[i] =a;
}
Arrays.sort(cust, new Comparator<Cust1>() {
@Override
public int compare(Cust1 o1, Cust1 o2) {
return o1.compareTo(o2);
}
});
}
}
答案 0 :(得分:1)
根据您的代码段:您不需要提供Comparator
,因为Cust1
已经实现了Comparable
。因此,这应该足够了:
Arrays.sort(cust);
此外,Cust1
的{{1}}实现并不能真正告诉一个对象Comparable
何时是另一个对象。可能,您的意思是这样的:
is less then
但是很难说, @Override
public int compareTo(Cust1 b) {
if(this.a + this.s < b.a + b.s) {
return 1;
} else if (this.a + this.s > b.a + b.s) {
return -1;
} else {
return 0;
}
}
的确切实现应该没有更多细节(例如,由于某些原因,Comparable
和o
字段根本没有参与比较)
答案 1 :(得分:0)
您的比较器工作错误。它应该返回:
<0 -当前对象比另一个对象少
Cust1类实现了可比的{
int a;
int o;
int s;
int p;
@Override
public int compareTo(Cust1 b) {
return Integer.compare(a + s, b.a + b.s);
}
}
并且您不必为Arrays.sort()
提供额外的比较器,因为Cust1
已经实现了Comparable
。