/**
 * 权重实体类,用于接收需要计算权重的数据和每个数据的权重
 * @param <T>
 */
public class Height<T> {
    private int height;
    private T t;
    public int getHeight() {
        return height;
    }
    public void setHeight(int height) {
        this.height = height;
    }
    public T getT() {
        return t;
    }
    public void setT(T t) {
        this.t = t;
    }
    
}

/**
 * Demo用于作为测试类
 *
 */
public class Demo {
    private String id;
    private Integer height;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public Integer getHeight() {
        return height;
    }
    public void setHeight(Integer height) {
        this.height = height;
    }
    
}

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

/**
 * 权重计算实现类(根据自己的理解来计算权重的,不喜勿喷)
 *
 * @param <T> 最终需要返回的数据
 */
public class WeightUtils<T> {
    /**
     * 计算权重后获取的数据
     * @param list 需要进行权重计算的数据
     * @return
     */
    public static <T>T getT(List<Height<T>> list){
        /*定义一个数字,用于统计权重的和*/
        int num = 0;
        /*遍历传入的集合,计算总权重*/
        for (int i = 0; i < list.size(); i++) {
            num += list.get(i).getHeight();
        }
        /*在总权重的区间获取一个随机数*/
        int random = getRandom(num);
        num = 0;
        for (int i = 0; i < list.size(); i++) {
            num = num + list.get(i).getHeight();
            if (num >= random) {
                return list.get(i).getT();
            }
        }
        return null;
    }
    /**
     * 获取随机数
     * @param num
     * @return
     */
    public static int getRandom(int num){
        double random = Math.random()*num;
        return (int)random;
    }
    /**
     * 测试的main方法计算权重
     * @param args
     */
    public static void main(String[] args) {
        /*将Demo进行实例化,用于表示需要计算权重的数据*/
        Demo demo1 = new Demo();
        demo1.setId(UUID.randomUUID().toString());
        demo1.setHeight(100);
        
        Demo demo2 = new Demo();
        demo2.setId(UUID.randomUUID().toString());
        demo2.setHeight(200);
        
        Demo demo3 = new Demo();
        demo3.setId(UUID.randomUUID().toString());
        demo3.setHeight(300);
        
        Demo demo4 = new Demo();
        demo4.setId(UUID.randomUUID().toString());
        demo4.setHeight(400);
        
        Demo demo5 = new Demo();
        demo5.setId(UUID.randomUUID().toString());
        demo5.setHeight(500);
        
        Demo demo6 = new Demo();
        demo6.setId(UUID.randomUUID().toString());
        demo6.setHeight(600);
        List<Height<Demo>> list = new ArrayList<Height<Demo>>();
        /*将Height进行实例化,用于存储前面的demo*/
        Height<Demo> w1 = new Height<Demo>();
        w1.setT(demo1);
        w1.setHeight(demo1.getHeight());
        
        Height<Demo> w2 = new Height<Demo>();
        w2.setT(demo2);
        w2.setHeight(demo2.getHeight());
        
        Height<Demo> w3 = new Height<Demo>();
        w3.setT(demo3);
        w3.setHeight(demo3.getHeight());
        
        Height<Demo> w4 = new Height<Demo>();
        w4.setT(demo4);
        w4.setHeight(demo4.getHeight());
        
        Height<Demo> w5 = new Height<Demo>();
        w5.setT(demo5);
        w5.setHeight(demo5.getHeight());
        
        Height<Demo> w6 = new Height<Demo>();
        w6.setT(demo6);
        w6.setHeight(demo6.getHeight());
        
        /*将权重实体类存放到集合中*/
        list.add(w1);
        list.add(w2);
        list.add(w3);
        list.add(w4);
        list.add(w5);
        list.add(w6);
        /*定义六个int类型的数字,用于最终*/
        int a1 = 0;
        int a2 = 0;
        int a3 = 0;
        int a4 = 0;
        int a5 = 0;
        int a6 = 0;
        int sum = 200000;
        for (int i = 1; i <= sum; i++) {
            Demo demo = getT(list);
            if (demo == demo1) {
                a1 ++;
            }
            if (demo == demo2) {
                a2 ++;
            }
            if (demo == demo3) {
                a3 ++;
            }
            if (demo == demo4) {
                a4 ++;
            }
            if (demo == demo5) {
                a5 ++;
            }
            if (demo == demo6) {
                a6 ++;
            }
        }
        /*输出权重和除以每个demo出现的次数,计算出来的值越小权重越高*/
        System.out.println("a1========="+a1+"============"+(double)sum/(double)a1);
        System.out.println("a2========="+a2+"============"+(double)sum/(double)a2);
        System.out.println("a3========="+a3+"============"+(double)sum/(double)a3);
        System.out.println("a4========="+a4+"============"+(double)sum/(double)a4);
        System.out.println("a5========="+a5+"============"+(double)sum/(double)a5);
        System.out.println("a6========="+a6+"============"+(double)sum/(double)a6);
        /*计算所有权重出现的概率之和*/
        double z = (double)a1/(double)sum+(double)a2/(double)sum+(double)a3/(double)sum+(double)a4/(double)sum+(double)a5/(double)sum+(double)a6/(double)sum;
        System.out.println(z);
        /*计算每个demo出现的次数之和,用于判断demo出现的次数之和是不是等于遍历的次数,用于判断是否有遗漏的情况*/
        System.out.println(a1+a2+a3+a4+a5+a6);
    }
}

JAVA权重计算(根据自己理解计算的,不喜勿喷)相关推荐

  1. 7年java水平_7年Java开发(月薪37K)分享正确的自学路线,不喜勿喷

    7年Java开发(月薪37K)分享正确的自学路线,不喜勿喷 原创编程仔日常2020-10-13 10:18:21 趁着昨晚空闲和今早的时间,编辑这一篇帖子,写下当初我自学Java走的弯路,希望大家引以 ...

  2. java 7年_笃学私教:7年Java开发(月薪37K)分享正确的自学路线,不喜勿喷!

    原标题:笃学私教:7年Java开发(月薪37K)分享正确的自学路线,不喜勿喷! 趁着昨晚空闲和今早的时间,编辑这一篇帖子,写下当初我自学Java走的弯路,希望大家引以为戒,不要多走前人走过的弯路,浪费 ...

  3. java中使用ElasticSearch聚合查询代码实例(个人笔记,不喜勿喷)

    PS→无奈:拥有梦想只是一种智力,实现梦想才是一种能力. 空闲之余就把先前做过的一个通过ElasticSearch的聚合来实现查询当月实际签到的天数记录一下,纯留下点记忆,大家勿喷. 1.如果不了解e ...

  4. JAVA基础个人总结,不喜勿喷

    文章目录 **Java基础语法** **计算机理论基础** **数据类型** 基本数据类型: 引用数据类型: **运算符** 位运算符 : 移位运算符 << : **流程控制**: 分支流 ...

  5. Java面试题大全(作者悉心整合,不喜勿喷,有错还望指正)

    经过这些年的沉浮,积累了不少工作中遇到以及别人文章上看到的问题.都一一记下,而后思考.最近也是工作繁忙,博客更新不够快,还望大家一直关注哦!话不多说,总结如下. 本文会按技能模块划分文章段落,每个模块 ...

  6. Java开发私教_笃学私教:7年Java开发(月薪37K)分享正确的自学路线,不喜勿喷...

    趁着昨晚空闲和今早的时间,编辑这一篇帖子,写下当初我自学Java走的弯路,希望大家引以为戒,不要多走前人走过的弯路,浪费时间.到今年年底结束,我做Java开发已经七年的时间了,现在月薪37k已经算知足 ...

  7. java编程题有难度的_算法与编程面试题 不喜勿喷 难度指数:*****...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 3.编写一个程序,将d:\java目录下的所有.java文件复制到d:\jad目录下,并将原来文件的扩展名从.java改为.jad. (大家正在做上面这道 ...

  8. 几个java小问题代码(大神不喜勿喷)

    这里用到了 import java.util.*; (1)输入一个五位数判断是否是回文数? public class Yule{ public static void main(String []ar ...

  9. 东软成都java培训只有两个月_我来为东软说句公道话!【不喜勿喷】

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 说实话,很多人埋怨学院那样的不是,这样的不是,确实有失公正.不可否认,学院有不尽人意的地方,但是试想,众口难调,有那个学校能做到让所有人都满意呢? 首先, ...

  10. java生成随机账号(SpringBoot结合Mybatis,入门勿喷,如有侵权请联系删除。)

    直接上代码 1.这是随机数生成的Utils工具类 /** * @Description: 生成字符串随机数(转为Long型) * @Auther: ZhongZH * @Date:2022/3/10 ...

最新文章

  1. Perforce使用之创建DEPOT流程
  2. linux终端信息读取,linux系统 如何通过终端查看信息
  3. 51nod 1499 (最小割)
  4. Spring IOC 组件概述
  5. Mybatis_映射文件配置
  6. Android之系统服务-WindowManager
  7. linux进程网络流量使用查询,linux centos 查看进程网络流量状态、网络流量(使用nethogs、nload)...
  8. 单点服务器微信公众号,腾讯云联合微信降低开发门槛 微信生态从单点云开发到全面云开发...
  9. Vue 中的 v-cloak 作用及用法
  10. session的保存方式.
  11. STM8L开发环境配置
  12. WinServer-the security database on the server does not have a computer account for
  13. CSAPP实验二——bomb lab实验
  14. android6 wifi耗电,移动端耗电量测试方法总结
  15. UE4.26水系统和浮力系统
  16. 与或树的盲目搜索和启发式搜索
  17. css 延时几秒代码,CSS3 会聚展开文字动画实例及animation-delay属性规则
  18. 点到平面的距离(最短距离)
  19. 华硕zx50j笔记本 拆机教程 换风扇教程
  20. locate用主动还是被动_improve到底是直接用被动式还是用主动表被动

热门文章

  1. My Fifty-fifth Page - 子集 - By Nicolas
  2. 让天底下没有难接的支付|支付宝网银直连转账到银行卡对接故事续集 支付对接不是一个单纯技术问题 网银直连转账到银行卡开通方式揭晓
  3. 跨境电商独立站海外引流渠道:Quora运营技巧
  4. 光棍.com市场推广策划书(爆笑)
  5. html面包屑菜鸟,同一产品页多个面包屑导航?
  6. 棋牌游戏“拖拉机”牌型提取
  7. 关于weight decay
  8. 增长率用计算机怎么算,增长率计算公式(excel公式来计算平均增长率的方法)...
  9. 基于STM32F103将采集的温度-湿度值通过串口输出,用OLED屏显示自己的学号和姓名以及显示AHT20的温度和湿度,滑动显示长字符
  10. Python xlwt 操作 excel 表格基础(三):单元格格式、字体格式、对齐方式、边框及填充等