java中的各种平均数

import java.text.DecimalFormat;

import java.util.Random;
 

/*
 * 功能:计算并比较各类型平均数,调和<=几何<=算术<=平方
 */

public class Average {

    private final static double dmax=999;//Double.MAX_VALUE;
    //Double类型的最大值,太大的double值,相乘会达到无穷大

    private final static double dmin=Double.MIN_VALUE;//Double类型的最小值

    private final static int n=100;//假设求取100个doubl数的各类平均值

    public static void main(String[] args){

        Random random = new Random();
    
    double[] x=new double[n];

        for(int i=0;i

            x[i]=Double.valueOf(Math.floor(random.nextDouble()*(dmax-dmin)));

        }

        //设置doubl字符串输出格式,不以科学计数法输出
    
    DecimalFormat df=new DecimalFormat("#,##0.00");//格式化设置

        //计算调和平均数

        double dHM=HarmonicMean(x);

        System.out.println("调和平均数="+df.format(dHM));
 
        //计算几何平均数

        double dGM=GeometricMean(x);

        System.out.println("几何平均数="+df.format(dGM));
 
        //计算算术平均数

        double dAM=ArithmeticMean(x);

        System.out.println("算术平均数="+df.format(dAM));
 
        //计算平方平均数

        double dMS=MeanSquare(x);

        System.out.println("平方平均数="+df.format(dMS));

        //计算中位数,用冒泡排序

        double dMN=MedianNumber(x);

        System.out.println("中位数="+df.format(dMN));

    }

    
//中位数,排序后去中间值,用冒泡排序

    public static double MedianNumber(double[] x) {
   
        double temp; // 记录临时中间值
   
        int m = x.length; // 数组大小
   
        for (int i = 0; i < m - 1; i++) {
   
            for (int j = i + 1; j < m; j++) {
   
                if (x[i] < x[j]) { // 交换两数的位置
   
                    temp = x[i];
   
                    x[i] = x[j];
   
                    x[j] = temp;
   
                }
   
            }
   
        }
   
        if(m%2==0) //偶数

            return (x[m/2]+x[m/2+1])/2;//偶数

        else //奇数

            return x[m/2+1]/2;

    }

    
//算术平均数:是一组数据的代数和除以数据的项数所得的平均数

    public static double ArithmeticMean(double[] x){

        int m=x.length;

        double sum=0;

        for(int i=0;i

            sum+=x[i];

        }

        return sum/m;

    }

    //平方平均数:是一组数据的平方和除以数据的项数的开方

    public static double MeanSquare(double[] x){

        int m=x.length;

        double sum=0;

        for(int i=0;i

            sum+=x[i]*x[i];

        }

        return Math.sqrt(sum/m);

    }

    
//几何平均数:是n个数据的连乘积的开n次方根。

    public static double GeometricMean(double[] x){

        int m=x.length;

        double sum=1;

        for(int i=0;i

            sum*=x[i];

        }

        return Math.pow(sum,1.0/m);//返回sum的m次方根

    }
    
    //调和平均数:一组数据的倒数和除数据的项数的倒数。

    public static double HarmonicMean(double[] x){

        int m=x.length;

        double sum=0;

        for(int i=0;i

            sum+=1/x[i];

        }

        return m/sum;

    }

}

你可能感兴趣的:(java基础)