編輯:添加了一些信息。我有一個對象數組。每個對象都有一個名稱和一個值。我需要按照這些值的降序對對象進行排序,並打印出名稱。我看到這個簡單的解決方案,但似乎無法將其應用到我的問題:http://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/基於屬性對對象數組排序
該代碼編譯沒有錯誤,但數組未被排序在所有。我知道這是因爲我知道輸出應該是什麼,即輸出應該是類似var364,var200,var65等,我得到的是var1,var2,var3等。
我試圖去掉不相關的代碼份這裏:
Main類
print(data.preselection());
private void print (UnitRow preselectedUnitRow) {
out.printf("Variables after preselection: \n");
for (int i=0;i<PRESELECTION_LIMIT;i++) {
out.printf("%s, ",preselectedUnitRow.getUnitName(i));
}
}
數據集(數據)
private UnitRow data;
...
public UnitRow preselection() {
UnitRow standardDeviationUnits = new UnitRow(numberOfVariables);
for (int i=0;i<numberOfVariables;i++){
Unit unit = new Unit(1,variableNames[i],calculateStandardDeviation(i));
standardDeviationUnits.add(unit);
}
standardDeviationUnits.sort();
return standardDeviationUnits;
}
UnitRow
import java.util.Arrays;
public class UnitRow {
private Unit[] units;
private int count;
...
public void sort() {
Arrays.sort(units);
}
}
單位
public class Unit implements Comparable<Unit>{
private NumberRow elements; //just a class with an array of doubles
private String name;
...
@Override
public int compareTo(Unit compareUnit) { //getValue returns a single type double number
int comparison = (int) (compareUnit.getValue(0) - getValue(0));
return comparison;
}
}
我假設我實現可比是錯誤的。你能發現問題嗎? 我這樣說是因爲我測試如下:
System.out.println(standardDeviationUnits.getValue(0,0));
standardDeviationUnits.sort();
System.out.println(standardDeviationUnits.getValue(0,0));
,返回的值完全相同。
爲什麼你認爲你的'compareTo'是錯的?你是否遇到編譯時錯誤,或者數組排序不正確? – dasblinkenlight
是忘了提。代碼編譯時沒有錯誤,但數組並未排序(完全沒有)。它似乎好像這種甚至沒有被稱爲。我知道它沒有排序,因爲我知道輸出應該是什麼樣子。 – Dimebag
爲什麼不在單元compareTo中,只是返回getValue(0) - CompareUnit.getValue(0)? –