一種抽獎轉盤算法


基本思路,概率總和不需要為100%,首先先算出所有的概率總和,然后隨機一個值在
0到總和之間,計算這個值落入的區間是在哪個位置。這種算法較為平均。
public static Integer duageAward(List<Double> turntables){
    Double sumPbi = 0.0;
    for (Double n: turntables){
        sumPbi += n;
    }

    Integer turntableId = null;
    Double rsel = RandomUtils.nextDouble(0,sumPbi);
    for (int i = 0;i < turntables.size();i++){
        if (turntables.get(i).compareTo(rsel)<0){
            rsel = rsel - turntables.get(i);
        }else{
            turntableId = i;
            break;
        }
    }
    return turntableId;
}

public static void main(String[] args) {
    List<Double> nums = new ArrayList<>();
    nums.add(10.1);
    nums.add(20.3);
    nums.add(99.92);
    nums.add(87.80);
    nums.add(99.90);
    nums.add(99.91);
    int []arr=new int[6];
    for (Long i = 0L;i<100000000L;i++){
        int idx = duageAward(nums);
        arr[idx] = arr[idx] + 1;
    }
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM