以下这段程序请高手解释下
public class tct implements Comparable{
int i,j;
public tct(int c,int d){
i=c;
j=d;
}
public int compareTo(Object x) {
int rvi=((tct)x).i;
return (i<rvi?-1:(i==rvi?0:1));
}
public String toString(){
return "(i)"+i+"(j)"+j+" ";
}
public static void main(String[] args) {
tct[] f=new tct[10];
Random r=new Random();
for(int b=0;b<f.length;b++)
{
f[b]=new tct(r.nextInt(100),r.nextInt(100));
}
Arrays.sort(f);
for(int e=0;e<f.length;e++)
{
System.out.print(f[e]);
}
}
}主要是这个方法里为什么要这样写 我不太理解
public int compareTo(Object x) {
int rvi=((tct)x).i;
return (i<rvi?-1:(i==rvi?0:1));
}
public class tct implements Comparable{
int i,j;
public tct(int c,int d){
i=c;
j=d;
}
public int compareTo(Object x) {
int rvi=((tct)x).i;
return (i<rvi?-1:(i==rvi?0:1));
}
public String toString(){
return "(i)"+i+"(j)"+j+" ";
}
public static void main(String[] args) {
tct[] f=new tct[10];
Random r=new Random();
for(int b=0;b<f.length;b++)
{
f[b]=new tct(r.nextInt(100),r.nextInt(100));
}
Arrays.sort(f);
for(int e=0;e<f.length;e++)
{
System.out.print(f[e]);
}
}
}主要是这个方法里为什么要这样写 我不太理解
public int compareTo(Object x) {
int rvi=((tct)x).i;
return (i<rvi?-1:(i==rvi?0:1));
}
int rvi=((tct)x).i; //取数
return (i <rvi?-1:(i==rvi?0:1)); //返回,至于返回什么,Comparable里有规定。
}
int i,j;
public tct(int c,int d){
i=c;
j=d;
}
public int compareTo(Object x) {
int rvi=((tct)x).i;
return (i <rvi?-1:(i==rvi?0:1));
}
public String toString(){
return "(i)"+i+"(j)"+j+" ";
}
public static void main(String[] args) {
tct[] f=new tct[10];
Random r=new Random();
for(int b=0;b <f.length;b++)
{
f[b]=new tct(r.nextInt(100),r.nextInt(100));
}
Arrays.sort(f);
for(int e=0;e <f.length;e++)
{
System.out.print(f[e]);
}
}
}
注意红色部分,你实现了Comparable接口,只有实现了这个接口才可以使用数组提供的排序Arrays.sort(f); ,实现接口的类要实现里面全部的方法,这个接口只有一个方法,就是compareTo,你的这个实现只是比较了两个对象的i值。
int rvi=((tct)x).i; //Object类型强制转换成tct类型的,否则无法调用到字段i
return (i <rvi?-1:(i==rvi?0:1)); //其实就是this.i 与 ((tct)x).i的问号表达式
} //compareTo方法返回值是 -1:小于 0:等于 1:大于
//可以看到里面用了2个问号表达式来判定确切值
主要是这个方法里为什么要这样写 我不太理解
public int compareTo(Object x) { //实现Comparable接口的方法!
int rvi=((tct)x).i; //因为传进来的x时object类型,所以先转型为tct类型后再用!
return (i <rvi?-1:(i==rvi?0:1)); //假如i<rvi 那就返回-1,否则返回(i==rvi?0:1))
//假如i==rvi,那就返回0,否则返回1
}
int rvi=((tct)x).i;
return (i <rvi?-1:(i==rvi?0:1));
}
中的Object x 是从哪传入的呢?