首页 > 编程语言 >java基于权重的抽奖算法

java基于权重的抽奖算法

时间:2023-12-05 16:24:03浏览次数:31  
标签:抽奖 java 权重 int add 算法 weights participants

最近需要写一个抽奖的功能(附带权重),根据这位博主https://blog.51cto.com/u_16213431/7116970,的算法理解了一下,记录下来

import java.util.ArrayList;
import java.util.List;
import java.util.Random;


public class HelloWorld {
public static void main(String []args) {
  
  List<String> participants = new ArrayList<>();//建立一个参与者数组(也可以是参与抽奖的物品数组)
  participants.add("Alice");
  participants.add("Bob");
  participants.add("Charlie");
  participants.add("David");

  List<Integer> weights = new ArrayList<>();//建立一个权重数组
  weights.add(1);
  weights.add(2);
  weights.add(3);
  weights.add(4);

  int totalWeight = weights.stream().mapToInt(Integer::intValue).sum();//计算权重总量,就是把权重数组中的权重加起来

  Random random = new Random();
  int randomNumber = random.nextInt(totalWeight);//产生 (0 ~ 总权重)中的随机数

  int cumulativeWeight = 0;
  int index = 0;
  for (int weight : weights) {//循环权重数组,并计算累积权重
    cumulativeWeight += weight;//计算累积权重
    if (randomNumber < cumulativeWeight) { //如果上面生成的随机数落在在个权重区间内,则跳出循环,使用当前的这个 参与者数组 下标,否则就进入下一个权重区间进行判断
      break;
    }
    index++;
  }

  String winner = participants.get(index);

  System.out.println("The winner is: " + winner);
  }
}

 

标签:抽奖,java,权重,int,add,算法,weights,participants
From: https://www.cnblogs.com/luzanzan/p/17877530.html

相关文章

  • 不平衡少样本数据集的算法方案
    在图像实际的细分场景中,经常会遇到数据集不均衡以及数据集数量有限等问题,如何有效利用数据集,提升自己的算法效果,这里大刀基于自己的实际项目经验,分享在实际图像分类领域遇到问题,以及解决的方案,供参考。前言大家好,我是张大刀。之前有个智慧工地的项目,其中一个需求是监控工地......
  • Java登陆第十七天——Java8之Lambda表达式
    在实例化Thread类时,需要传入一个Runnable接口的实现类。publicThread(Runnabletarget)实际开发中,通常是使用匿名内部类实现Runnable接口。栗子:publicclassTest27{publicstaticvoidmain(String[]args){Threadt=newThread(newRunnable(){//匿名......
  • 秦疆的Java课程笔记:58 数组 冒泡排序
    总共有八大排序,其中冒泡排序无疑是较为出名的排序算法之一。冒泡排序的代码相当简单,两层循环,外层冒泡轮数,里层依次比较。当看到嵌套循环,应该立马意识到,这个算法的时间复杂度是\(O(n^2)\)。冒泡排序基本步骤:比较数组中两个相邻元素,如果第一个数比第二个数大,就交换位置......
  • 秦疆的Java课程笔记:59 数组 稀疏数组
    当一个数组中大部分元素都是0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方式是:记录数组一共有几行几列,有多少个不同值把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模publicclassArrayDemo1{publicstaticv......
  • Java面试高频八股文
    一、Java基础(一)1.面向对象和面向过程的区别面向过程把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题;面向对象会先抽象出对象,然后用对象执行方法的方式解决问题;面向对象开发的程序一般更易维护、易复用、易扩展;    2.基本类型与包装类①Java中的几种......
  • 秦疆的Java课程笔记:56 数组 二维数组
    多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。秦疆老师表示Java中并不太使用二维以上的多维数组。例如二维数组:inta[][]=newint[2][5],就可以看成是一个两行五列的数组publicclassArrayDemo1{publicstaticv......
  • java通过springboot开发生成二维码
    1、添加依赖<dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.1</version><!--请使用最新版本--></dependency>2、编写代码@T......
  • 智慧校园云平台,Java智慧校园信息管理平台源码
    智慧班牌是数字化智慧校园建设不断发展的产物,是教育信息化改革的部分体现。它包含以往班牌优点的同时,还综合考虑教改及学校各方面的需求,加入了更多的实用功能,比如:显示班级及教室基础信息、当前日期和时间、以及由传感器采集的实时数据,同时显示多端平台数据同步,具有多样性的交互功能......
  • java字符串 加上n个"|--",与过滤处理
    /******original,左边扩充n个"-"*@paramn*@paramoriginal*@return*/privateStringfullStr(intn,Stringoriginal){StringBuildersb=newStringBuilder();for(inti=0;i<n;i++){......
  • 基于PLE结合卡尔曼滤波的RSSI定位算法matlab仿真
    1.算法运行效果图预览     2.算法运行软件版本MATLAB2022a 3.算法理论概述        基于PLE(Power-LawEqualizer)结合卡尔曼滤波的RSSI(ReceivedSignalStrengthIndicator)定位算法是一种利用无线信号强度进行位置估计的方法。该方法通过PLE算法对RSSI......