用JAVA如何求一组数据的加权平均数!
或者如何用数据库SQL直接实现!加权平均数,不是算术平均数!

解决方案 »

  1.   

    这个应该是数学问题吧,我想用java实现不难的加权平均数
      

  2.   

    如果数据是定的用JAVA是是不难啊
    可是如果一组数据是不定值怎么办啊
    这组数据有可能是10个,15个,20个,里面每个数出现的次数又都不一样~
    怎么做啊,帮帮忙啊,
      

  3.   

    用数学方法?我就是不知道JAVA里哪个函数可以做到这个啊
    假如15个数1,3,6,8,8,9,3,6,2,6,7,8,1,5,求这组数的加权平均数,怎么搞啊?
      

  4.   

    //算法不就是这样吗       double [] numbers = {1,3,6,8,8,9,3,6,2,6,7,8,1,5}
           double [] weights = {...}//这里是15个数的权值
            double sum = 0;
            for(int i=0; i<numbers.length; i++0){
                 sum += numbers[i]* weights[i] 
           }
      

  5.   

    里面各个数出现的几率也必须是变量~
    是什么意思 是给出的权值 还是 weight = 出现次数/总个数若是  weight = 出现次数/总个数
    那就也很简单 不用去计算出现次数  直接将 weight 统一为 1/numbers.length
      

  6.   


    private static double getWeiAvg(int[] num){
    Map<Integer,Integer> map = new HashMap<Integer,Integer>();
    for(int i = 0,l = num.length;i< l ; i ++){
    int temp = num[i];
    if(map.get(temp) == null){
    map.put(temp,1);
    }else {
    map.put(temp,map.get(temp) + 1);
    }
    }
    Set<Integer> set = map.keySet();
    Iterator<Integer> it = set.iterator();
    int data_sum = 0;
    int times_sum = 0;
    int data = 0;
    int time = 0;
    while(it.hasNext()){
    data = it.next();
    time = map.get(data);
    data_sum += data * time;
    times_sum += time;
    }
    BigDecimal b1 = new BigDecimal(data_sum);
    BigDecimal b2 = new BigDecimal(times_sum);
    return b1.divide(b2,2,BigDecimal.ROUND_HALF_UP).doubleValue();
    }

    public static void main(String[] args){
    //(10×2 + 9×1 + 8×3 + 7×4 )÷10 = 8.1  
    int[] num = {10,10,9,8,8,8,7,7,7,7};
    System.out.println(getWeiAvg(num));
    }