首页 > 解决方案 > 根据百分比机会获取项目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

标签: javaalgorithm

解决方案


算法步骤是:
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 的出现次数最多


推荐阅读