我有一个对象列表,每个对象都包含一个百分比。
我想根据百分比抓取一个随机对象。
示例:
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 出现次数最多
关于java - 根据百分比机会获取项目java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61962988/