java - 根据百分比机会获取项目java
问题描述
我有一个对象列表,每个对象都包含一个百分比。
我想根据它的百分比抓取一个随机对象。
例子:
public class Item {
private int chance;
/* ... */
}
public class App {
private List<Item> items;
/* ... */
public getItem() {
// Get random item based on it's percentage
}
}
我看过很多关于体重的帖子,但在这种情况下,我需要百分比。
谢谢!:P
解决方案
算法步骤是:
1 - 求和机会
2 - 根据机会多次存储一个项目
3 - 生成一个直到 sum_Chances 的数字并返回索引(即对象)
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Percent
{
List<Item> l;
Map<Integer,Item> m;
public static void main(String[] args)
{
Percent p = new Percent();
for(int i=0;i<=9;i++)
{
System.out.println(i+"_itemNo="+p.getItem().name);
}
}
Percent()
{
l = new ArrayList();
l.add(new Item("i1",1));
l.add(new Item("i2",2));
l.add(new Item("i3",3));
}
public Item getItem()
{
m = new HashMap();
int total=0;
int k=0;
for(int i=0;i<l.size();i++)
{
total += l.get(i).chance;
for(int j=0;j<l.get(i).chance;j++)
{
m.put(k,l.get(i));
k++;
}
}
int r = (int)(Math.random()*total);
//System.out.println(r);
return m.get(r);
}
class Item
{
Item(){};
Item(String name, int chance)
{
this.name = name;
this.chance = chance;
}
public int chance;
public String name;
}
}
输出:
0_itemNo=i3
1_itemNo=i3
2_itemNo=i3
3_itemNo=i3
4_itemNo=i1
5_itemNo=i2
6_itemNo=i1
7_itemNo=i2
8_itemNo=i2
9_itemNo=i3
即使有 10 个事件,也很容易看出 item_3 的出现次数最多
推荐阅读
- python - 无法在 Django Rest Framework 中发布数据
- date - 可以在不更改 conf 文件的情况下更改 RSYSLOG_FileFormat 时间戳输出吗?
- javascript - 为什么我的函数在声明返回时没有结束(Node.js 和 Express.js)
- c - :=$= 在 Makefile 中是什么意思?
- excel - 基于索引在数组中查找值
- video - ffmpeg 读取视频高宽不正确?
- java - 使用 spring profile 环境变量运行 jar
- javascript - ClearInterval 不会清除相同的 SetInterval
- segmentation-fault - 气流2.0:pip3安装'apache-airflow [amazon]'时出现分段错误(核心转储)
- r - 折叠一个数据框列表并与 R 中的另一个数据框列表组合