我目前正在尝试用java创建一个可能基于选择的系统,但是它似乎不能很好地工作,我当前的代码如下:
private ArrayList<SelectableObjekt> obs;
obs = new ArrayList<>();
obs.add(new SelectableObjekt("hello, with 3% probably", 30)); //Will be devied in the SelectableObjekt class by 10 so 30 will become 3% and 700 will become 70%
obs.add(new SelectableObjekt("hello, with 70% probably", 700));
obs.add(new SelectableObjekt("hello, with 90% probably", 900));
obs.sort(new Comparator<SelectableObjekt>() {
@Override
public int compare(SelectableObjekt o1, SelectableObjekt o2) {
return Double.compare(o1.getChance(), o2.getChance());
}
});
并选择对象:
private SelectableObjekt selectRandom() {
double perc = ((int)ThreadLocalRandom.current().nextInt(1001))/10D;
for (int i = 0; i < obs.size(); i++) {
SelectableObjekt obj = obs.get(i);
if(obj.getChance() > perc) {
return obj;
}
}
return obs.get(chestDrops.size()-1);
}
总而言之,SelectableObjekt包含一个内部可能为0.1-100的机会int。 100表示100%,所以32.3表示32.3%,但是选择不能正常工作,我得到的频率比90%的高出70%,我无法理解为什么会发生这种情况。
答案 0 :(得分:0)
编写代码的方式并不罕见。您有三个范围。
0 - 3% - the first option
3 - 70% - the second option.
70 - 90% - the third option.
90 - 100% - also the third option.
这意味着“ 70%”选项应该是〜67%的时间,而“ 90%”选项是〜30%的时间。