java查找变量类型参数的中值
我有一个方法,它以对象的形式接受可变数量和类型的参数。我只想计算这些论点中数字的中位数。我使用列表插入元素(数字),然后使用集合对列表进行排序。我在集合中遇到了一个类播异常。每当我传递整数和双精度作为参数时,sort()行。以下是我的方法:
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;
}
}
我可以通过以下任何方式调用该方法:
系统。出来println(“中位数----------”+cmp.中位数(13,18,13,14,13,16,14,21,13))
系统。出来println(“中位数---------”加cmp.中位数(13,18.1,13,14,13,16,14,21,13))
系统。出来println(“中位数----------”+cmp.中位数(13,18,13,13,13,14,13,16,14,21,13)
系统。出来println(“中位数----------”+cmp.中位数(13,18,“xyz”,13,14,13,16,14,21,13))
我想是收藏。sort()不能与double一起使用。请建议一条出路
共 (0) 个答案