欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2023/12/18 编程问答 50 豆豆
生活随笔 收集整理的这篇文章主要介绍了 JAVA权重计算(根据自己理解计算的,不喜勿喷) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

/**
 * 权重实体类,用于接收需要计算权重的数据和每个数据的权重
 * @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权重计算(根据自己理解计算的,不喜勿喷)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。