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
}
}
}
}