Java题目练习

求出下列数据的平均数,中位数,标准差

在这里插入图片描述

工号 姓名 工资
001 杨林 3456
002 何晓玉 4452
003 郭文 5550
004 杨彬 6523
005 苏宇拓 3465
006 杨楠 6456
007 陈强 5002
008 杨燕 4135
009 陈蔚 3600
010 邱鸣 3598
011 王耀华 3698
012 杜鹏 3456
013 孟永科 4452
014 巩月明 5550
015 田格艳 6523
016 王琪 3465
017 董国株 6456
018 张昭 5002
019 龙丹丹 4135
020 雷庭 5500
021 程丹丹 6000
022 刘健名 2000
023 苏红江 6000
024 廖嘉一 3256

新建一个Employee类

package itwcn.com;

/**
 * @author Administrator
 */
public class Employee {

    private String id = null;
    private String name = null;
    private double salary = 0.0;

    public Employee() {
    }

    public Employee(String id, String name, double salary) {
        this.setId(id);
        this.setName(name);
        this.setSalary(salary);
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

}

新建一个EmployeeManager类

package itwcn.com;

/**
 * 管理类,定义员工管理的方法
 * @author Administrator
 */
public class EmployeeManager{
    /**声明一个数组变量,没有引用对象**/
    private Employee[] empA = null;

    public EmployeeManager() {
        /**在创建管理对象时,创建数组对象**/
        empA = new Employee[24];
    }

    /**
     * 添加员工对象到管理器的数组
     * @param i 员工的索引
     * @param e 一个员工对象
     */
    public void addEmployee(int i,Employee e) throws Exception {
        if(i >= 24) {
            throw new Exception("员工编号的索引超出了数组的边界");
        }
        empA[i] = e;
    }

    /**计算并返回平均工资**/
    public double getAvg() {
        double average =0.0,sum = 0.0;
        for (int i = 0; i < 24; i++) {
            sum = (sum + empA[i].getSalary());
        }
        average = sum/24;
        /**求平均值**/
        return average;
    }
    /**计算并返回薪资的标准差 Standard Deviation**/
    /**
     * s为标准差,sqrt表示开根号,x1,x2,x3...是薪资数据,x是平均数,n为数据的个数
     * 计算公式:s = sqrt[[(x1-x)^2+(x2-x)^2+...+(xn-x)^2]/(1/n)]
     * @return 返回标准差
     */
    public double getSD() {
        double deviation = 0.0;
        double [] arr = new double[24];

        double b = 0.0,sum = 0.0;
        for (int i = 0; i < 24; i++) {
            arr[i] = Math.pow((empA[i].getSalary() - getAvg()),2);
            sum += arr[i];
        }
        b = sum/24;
        deviation = Math.sqrt(sum);

        return deviation;
    }
    /**计算并返回薪资的中位数**/
    public double getMidNumber() {
        //排序之后的中间数据,如果是偶数个数,取中间的2个元素的平均值
        double s1 = 0.00;
        double s2 = 0.00;

        try {
            //在求中位数之前先排序
            bubbleSort();
            s1 = empA[11].getSalary();
            s2 = empA[12].getSalary();

        } catch (Exception e) {
            e.printStackTrace();
        }
        //中位数,中间两位数的平均值
        return (s1 + s2)/2.0;
    }

    private void bubbleSort() {
        int n = 1;
        for (int i = 1;i<empA.length-1;i++) {
            for (int j = 0; j < empA.length-1-i; j++) {
                Employee temp = null;
                if (empA[i] == null && empA[i+1] == null) {
                    continue;
                }
                if(empA[i].getSalary()>empA[i+1].getSalary()) {
                    //置换相邻的两个元素所引用的对象
                    temp = empA[i];
                    empA[i] = empA[i+1];
                    empA[i+1] = temp;
                }
            }
        }
    }
}

建立一个测试类

package itwcn.com;

public class Test {
    public static void main(String[] args) {
        EmployeeManager em = new EmployeeManager();
        try {
            em.addEmployee(0,new Employee("001","杨林",3456));
            em.addEmployee(1,new Employee("002","何晓玉",4452));
            em.addEmployee(2,new Employee("003","郭文",5550));
            em.addEmployee(3,new Employee("004","杨彬",6523));
            em.addEmployee(4,new Employee("005","苏宇拓",3465));
            em.addEmployee(5,new Employee("006","杨楠",6456));
            em.addEmployee(6,new Employee("007","陈强",5002));
            em.addEmployee(7,new Employee("008","杨燕",4135));
            em.addEmployee(8,new Employee("009","陈蔚",3600));
            em.addEmployee(9,new Employee("010","邱鸣",3598));
            em.addEmployee(10,new Employee("011","王耀华",3698));
            em.addEmployee(11,new Employee("012","杜鹏",3456));
            em.addEmployee(12,new Employee("013","孟永科",4452));
            em.addEmployee(13,new Employee("014","巩月明",5550));
            em.addEmployee(14,new Employee("015","田格艳",6523));
            em.addEmployee(15,new Employee("016","王琪",3465));
            em.addEmployee(16,new Employee("017","董国株",6456));
            em.addEmployee(17,new Employee("018","张昭",5002));
            em.addEmployee(18,new Employee("019","龙丹丹",4235));
            em.addEmployee(19,new Employee("020","雷霆",5500));
            em.addEmployee(20,new Employee("021","程丹丹",6000));
            em.addEmployee(21,new Employee("022","刘键名",2000));
            em.addEmployee(22,new Employee("023","苏红江",6000));
            em.addEmployee(23,new Employee("024","廖嘉一",3256));

            double dM = em.getMidNumber();
            System.out.println("中位数:" + em.getMidNumber());
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("平均数:" + String.format("%.2f", em.getAvg()));
        System.out.println("标准差:" + String.format("%.2f",em.getSD()));
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值