我正在寻找一种方法,我可以随机生成角色的统计数据(如技能,攻击,防御......)。 让我们说我的统计数据来自
1 - 100
现在我想要
之间的统计数据1 - 30概率为30%
31 - 50概率为45%
51-75概率为20%76 - 100概率为5%
我知道我可以使用Math.random()
课程或SELECT
,但不确定如何。
提前致谢!
答案 0 :(得分:1)
一个选项是生成0到100范围内的随机数,然后使用一系列if-else
语句来确定为您的角色生成哪些统计数据:
public void printRandomStats() {
Random random = new Random();
int next = random.nextInt(101);
if (next <= 30) {
// this will happen 30% of the time
System.out.println("Generating stats from 1-30");
} else if (next <= 75) {
// this will happen 45% of the time
System.out.println("Generating stats from 31-75");
} else if (next <= 95) {
// this will happen 20% of the time
System.out.println("Generating stats from 76-95");
} else {
// this will happen 5% of the time
System.out.println("Generating stats from 96-100");
}
return;
}
答案 1 :(得分:1)
解决问题的最佳方法是创建一个非均匀的概率值列表。然后从该列表中随机选择一个值。例如:
如果我们有如下列表:
{5 , 5 , 5 , 5 , 10 , 10 , 10 , 20, 20 ,30}
我们的概率就是这样;
5 => 40% --- 10 => 30% --- 20 => 20% --- 30 => 10%
您可以使用以下简单方法实现该解决方案:
private static int generateStat()
{
ArrayList<Integer> stats = new ArrayList<Integer>();
//first parameter is probability and second is the value
stats.addAll(Collections.nCopies(30, (int)(Math.random()*30)));
stats.addAll(Collections.nCopies(45, (int)(Math.random()*20)+30));
stats.addAll(Collections.nCopies(20, (int)(Math.random()*25)+50));
stats.addAll(Collections.nCopies(5, (int)(Math.random()*25)+75));
return stats.get((int)(Math.random()*100));
}