有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

    }

我可以通过以下任何方式调用该方法:

  1. 系统。出来println(“中位数----------”+cmp.中位数(13,18,13,14,13,16,14,21,13))

  2. 系统。出来println(“中位数---------”加cmp.中位数(13,18.1,13,14,13,16,14,21,13))

  3. 系统。出来println(“中位数----------”+cmp.中位数(13,18,13,13,13,14,13,16,14,21,13)

  4. 系统。出来println(“中位数----------”+cmp.中位数(13,18,“xyz”,13,14,13,16,14,21,13))

我想是收藏。sort()不能与double一起使用。请建议一条出路


共 (0) 个答案