if(objs[j].compare(objs[j+1]))
的话就没意义了 编译器也不会给过的
if()条件里面叙述句最后的运算结果必须是 boolean
可是 compare() 方法的传回值是
public int compare(ICanCompare i) {}
是 int 而这个int代表的是两物件之间的面积差
所以回到 if(objs[j].compare(objs[j+1])<0)来看
这句翻成白话文 "如果 objs[j] 面积减 objs[j+1]面积 小于0就..."
那段的程式码就是一个个去互相比较
如果阵列中 第 j 位置的形状面积减去 第 j+1位置的形状面积小于0
表示 j那位置的形状面积 比 j+1位置的形状面积小
于是就将两个交换位置
因为排序后的阵列要"面积大的在上面"
复制程式
//这是典型的气泡式排序法
static void bSort(ICanCompare[] objs){ //排序用的副程式 参数接受一个 ICanCompare阵列
for(int i=objs.length-1;i>0;i--){ //回圈, i由阵列最底端开始, >0就继续执行, 每圈完 i-1
for(int j=0;j<i;j++){ //回圈, j从0开始, <i就继续执行, 每圈完 j-1
if(objs[j].compare(objs[j+1])<0){ //如果 阵列中第j位置的形状面积-第j+1位置的形状面积<0 (表示j+1那个形状比较大)
ICanCompare temp=objs[j]; //开个暂存空间放 阵列位置j的形状
objs[j]=objs[j+1]; //将阵列j+1位置的形状放到阵列j位置
objs[j+1]=temp;//将暂存的形状放到阵列位置j+1
}
}
}
}