【高中数学/统计学】用Java程序计算108将分数的均值、方差与标准差

【主程序】

主程序用来做初始化、计算和输出

package test260215;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 用于计算108将的均值、方差和标准差
 *
 */
public class Test {
    // 入口
    public static void main(String[] args) {
        // 108将名单
        final String names="宋江,卢俊义,吴用,公孙胜,关胜,林冲,秦明,呼延灼,花荣,柴进,李应,朱仝,鲁智深,武松,董平,张清,杨志,徐宁,索超,戴宗,刘唐,李逵,史进,穆弘,雷横,李俊,阮小二,张横,阮小五,张顺,阮小七,杨雄,石秀,解珍,解宝,燕青,朱武,黄信,孙立,宣赞,郝思文,韩滔,彭玘,单廷圭,魏定国,萧让,裴宣,欧鹏,邓飞,燕顺,杨林,凌振,蒋敬,吕方,郭盛,安道全,皇甫端,王英,扈三娘,鲍旭,樊瑞,孔明,孔亮,项充,李衮,金大坚,马麟,童威,童猛,孟康,侯健,陈达,杨春,郑天寿,陶宗旺,宋清,乐和,龚旺,丁得孙,穆春,曹正,宋万,杜迁,薛永,施恩,李忠,周通,汤隆,杜兴,邹渊,邹润,朱贵,朱富,蔡福,蔡庆,李立,李云,焦挺,石勇,孙新,顾大嫂,张青,孙二娘,王定六,郁保四,白胜,时迁,段景住,";
        
        // 初始化108将链表
        List<Person> persons=new ArrayList<Person>();        
        String[] nameArr=names.split(",");
        for(int i=0;i<nameArr.length;i++) {
            String name=nameArr[i];
            Person p=new Person();
            p.setSn(i+1);
            p.setName(name);
            p.setScore(getRnd(0,100));// 设定随机分数
            persons.add(p);
        }
        
        System.out.println("108将及其分数");
        float total=0;// 总分
        for(Person p:persons) {
            total+=p.getScore();
            String text=String.format("%3d.%s:%d\t", p.getSn(),p.getName(),p.getScore());
            System.out.print(text);
            if(p.getSn()%4==0) {
                System.out.println();
            }
        }
        
        System.out.println("\n分数区段个数");
        int[] scoreArr=new int[11];
        for(Person p:persons) {
            scoreArr[(int)(p.getScore()/10)]++;
        }
        int idx=0;
        for(int i:scoreArr) {
            String grid=repeatStr("⬛",i);
            System.out.println(String.format("%3d-%3d %s 计%d个", idx*10,(idx+1)*10-1,grid,i));
            idx++;
        }
        
        float average=total/persons.size();// 均值
        System.out.println("\n均值:"+String.format("%6.2f",average));
        
        float variance=0;// 方差
        for(Person p:persons) {
            variance+=Math.pow((float)p.getScore()-average,2);
        }
        variance/=persons.size();
        float standardDeviation=(float)Math.sqrt(variance);// 标准差

        System.out.println("方差:"+String.format("%6.2f",variance));
        System.out.println("标准差:"+String.format("%6.2f", standardDeviation));
        
        System.out.println("\n108将及其偏差值");
        
        
        for(Person p:persons) {
            float bias=(p.getScore()-average)/standardDeviation*10+50;
            p.setBias(bias);
            String text=String.format("%3d.%s:%d\t", p.getSn(),p.getName(),(int)p.getBias());
            System.out.print(text);
            if(p.getSn()%4==0) {
                System.out.println();
            }
        }
    }
    
     /**
     * 将一个字符串重复n次,返回重复后的字符串(代码简洁效率稍低)
     * @param seed 字符串
     * @param n 次数
     * @return
     */
    public static String repeatStr(String seed,int n) {
        return String.join("", Collections.nCopies(n, seed));
    }
    
    /**
     * 取得包括顶底在内的随机整数
     * @param min
     * @param max
     * @return
     */
    private static int getRnd(int min,int max) {
         return (int)(min+Math.random()*(max-min+1));
    }
}

实体类:

实体类作为个人信息的载体

package test260215;

/**
 * 单个人
 * Pojo类,只存放数据
 *
 */
public class Person {
    private String name;// 名称
    private int sn;// 序号
    private int score;// 分数
    private float bias;// 偏差值
    
    
    public float getBias() {
        return bias;
    }
    public void setBias(float bias) {
        this.bias = bias;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getSn() {
        return sn;
    }
    public void setSn(int sn) {
        this.sn = sn;
    }
    public int getScore() {
        return score;
    }
    public void setScore(int score) {
        this.score = score;
    }    
}

【某次执行结果】

108将及其分数
  1.宋江:67      2.卢俊义:90      3.吴用:97      4.公孙胜:69    
  5.关胜:75      6.林冲:14      7.秦明:31      8.呼延灼:59    
  9.花荣:11     10.柴进:54     11.李应:6     12.朱仝:7    
 13.鲁智深:99     14.武松:55     15.董平:84     16.张清:62    
 17.杨志:76     18.徐宁:77     19.索超:7     20.戴宗:85    
 21.刘唐:44     22.李逵:0     23.史进:52     24.穆弘:86    
 25.雷横:4     26.李俊:78     27.阮小二:80     28.张横:28    
 29.阮小五:33     30.张顺:48     31.阮小七:57     32.杨雄:54    
 33.石秀:79     34.解珍:25     35.解宝:33     36.燕青:17    
 37.朱武:27     38.黄信:100     39.孙立:58     40.宣赞:34    
 41.郝思文:11     42.韩滔:87     43.彭玘:36     44.单廷圭:73    
 45.魏定国:42     46.萧让:97     47.裴宣:20     48.欧鹏:50    
 49.邓飞:17     50.燕顺:78     51.杨林:36     52.凌振:35    
 53.蒋敬:58     54.吕方:71     55.郭盛:94     56.安道全:87    
 57.皇甫端:5     58.王英:73     59.扈三娘:88     60.鲍旭:0    
 61.樊瑞:100     62.孔明:80     63.孔亮:2     64.项充:86    
 65.李衮:92     66.金大坚:99     67.马麟:35     68.童威:26    
 69.童猛:75     70.孟康:49     71.侯健:34     72.陈达:48    
 73.杨春:25     74.郑天寿:16     75.陶宗旺:7     76.宋清:42    
 77.乐和:6     78.龚旺:65     79.丁得孙:70     80.穆春:84    
 81.曹正:84     82.宋万:53     83.杜迁:27     84.薛永:6    
 85.施恩:98     86.李忠:60     87.周通:90     88.汤隆:84    
 89.杜兴:81     90.邹渊:52     91.邹润:38     92.朱贵:16    
 93.朱富:2     94.蔡福:9     95.蔡庆:68     96.李立:5    
 97.李云:70     98.焦挺:55     99.石勇:0    100.孙新:50    
101.顾大嫂:1    102.张青:21    103.孙二娘:6    104.王定六:90    
105.郁保四:75    106.白胜:19    107.时迁:16    108.段景住:94    

分数区段个数
  0-  9 ⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛ 计17个
 10- 19 ⬛⬛⬛⬛⬛⬛⬛⬛⬛ 计9个
 20- 29 ⬛⬛⬛⬛⬛⬛⬛⬛ 计8个
 30- 39 ⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛ 计10个
 40- 49 ⬛⬛⬛⬛⬛⬛ 计6个
 50- 59 ⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛ 计13个
 60- 69 ⬛⬛⬛⬛⬛⬛ 计6个
 70- 79 ⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛ 计13个
 80- 89 ⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛ 计13个
 90- 99 ⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛⬛ 计11个
100-109 ⬛⬛ 计2个

均值: 50.29
方差:985.50
标准差: 31.39

108将及其偏差值
  1.宋江:55      2.卢俊义:62      3.吴用:64      4.公孙胜:55    
  5.关胜:57      6.林冲:38      7.秦明:43      8.呼延灼:52    
  9.花荣:37     10.柴进:51     11.李应:35     12.朱仝:36    
 13.鲁智深:65     14.武松:51     15.董平:60     16.张清:53    
 17.杨志:58     18.徐宁:58     19.索超:36     20.戴宗:61    
 21.刘唐:47     22.李逵:33     23.史进:50     24.穆弘:61    
 25.雷横:35     26.李俊:58     27.阮小二:59     28.张横:42    
 29.阮小五:44     30.张顺:49     31.阮小七:52     32.杨雄:51    
 33.石秀:59     34.解珍:41     35.解宝:44     36.燕青:39    
 37.朱武:42     38.黄信:65     39.孙立:52     40.宣赞:44    
 41.郝思文:37     42.韩滔:61     43.彭玘:45     44.单廷圭:57    
 45.魏定国:47     46.萧让:64     47.裴宣:40     48.欧鹏:49    
 49.邓飞:39     50.燕顺:58     51.杨林:45     52.凌振:45    
 53.蒋敬:52     54.吕方:56     55.郭盛:63     56.安道全:61    
 57.皇甫端:35     58.王英:57     59.扈三娘:62     60.鲍旭:33    
 61.樊瑞:65     62.孔明:59     63.孔亮:34     64.项充:61    
 65.李衮:63     66.金大坚:65     67.马麟:45     68.童威:42    
 69.童猛:57     70.孟康:49     71.侯健:44     72.陈达:49    
 73.杨春:41     74.郑天寿:39     75.陶宗旺:36     76.宋清:47    
 77.乐和:35     78.龚旺:54     79.丁得孙:56     80.穆春:60    
 81.曹正:60     82.宋万:50     83.杜迁:42     84.薛永:35    
 85.施恩:65     86.李忠:53     87.周通:62     88.汤隆:60    
 89.杜兴:59     90.邹渊:50     91.邹润:46     92.朱贵:39    
 93.朱富:34     94.蔡福:36     95.蔡庆:55     96.李立:35    
 97.李云:56     98.焦挺:51     99.石勇:33    100.孙新:49    
101.顾大嫂:34    102.张青:40    103.孙二娘:35    104.王定六:62    
105.郁保四:57    106.白胜:40    107.时迁:39    108.段景住:63    

END

posted @ 2014-12-17 10:56  逆火狂飙  阅读(713)  评论(0)    收藏  举报