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<n;i++){//隨機生成n個double數

            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<m;i++){//計算x值的倒數

            sum+=x[i];

        }

        return sum/m;

    }

    //平方平均數:是一組數據的平方和除以數據的項數的開方

    public static double MeanSquare(double[] x){

        int m=x.length;

        double sum=0;

        for(int i=0;i<m;i++){//計算x值的倒數

            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<m;i++){//計算x值的倒數

            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<m;i++){//計算x值的倒數

            sum+=1/x[i];

        }

        return m/sum;

    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章