オブジェクトの形式で変数の数と型の引数を取るメソッドがあります。これらの引数の数値のみの中央値を計算したい。Lists を使用して要素 (数値) を挿入し、次に Collections を使用してリストを並べ替えました。引数として double と共に整数を渡すと、Collections.sort() 行で Classcast 例外が発生します。これが私の方法です:
public Object median(Object... O) {
List l = new ArrayList<Object>();
for (int i = 0; i < O.length; i++) {
if (Number.class.isAssignableFrom(O[i].getClass())) {
l.add(O[i]);
} else {
try {
double d = Double.parseDouble(O[i].toString());
l.add(d);
} catch (Exception e) {
}
}
}
Collections.sort(l);
double sum = 0;
if (l.size() % 2 == 0) {
if (l.get((l.size()) / 2 - 1) instanceof Double) {
Double d = (Double) l.get((l.size()) / 2 - 1);
sum += d;
} else if (l.get((l.size()) / 2 - 1) instanceof Integer) {
Integer d = (Integer) l.get((l.size()) / 2 - 1);
sum += d;
}
if (l.get((l.size()) / 2) instanceof Double) {
Double d1 = (Double) l.get(l.size() / 2);
sum += d1;
} else if (l.get((l.size()) / 2) instanceof Integer) {
Integer d1 = (Integer) l.get(l.size() / 2);
sum += d1;
}
return sum / 2;
} else {
if (l.get((l.size()) / 2) instanceof Double) {
Double d1 = (Double) l.get(l.size() / 2);
sum = d1;
} else if (l.get((l.size()) / 2) instanceof Integer) {
Integer d1 = (Integer) l.get(l.size() / 2);
sum = d1;
}
return sum;
}
}
次のような方法でメソッドを呼び出すことができます。
System.out.println("中央値---------"+cmp.median(13, 18, 13, 14, 13, 16, 14, 21, 13));
System.out.println("中央値---------"+cmp.median(13, 18.1, 13, 14, 13, 16, 14, 21, 13));
System.out.println("中央値---------"+cmp.median(13, 18, 13,"13", 14, 13, 16, 14, 21,13);
System.out.println("中央値---------"+cmp.median(13, 18,"xyz", 13, 14, 13, 16, 14,21,13));
Collections.sort() は Doubles では機能しないと思います。抜け道を提案してください!