我一直在尝试为一个简单的战斗模拟器编写这个程序,我要做的任务是询问用户在一轮战斗中的低,中,高攻击的百分比。
因此,例如,用户输入低= 50%,中等= 30%,高= 20%。现在我的问题源于此。如何做到这样,在一轮中,程序将在50%的时间内打印,在30%的时间打印,在20%的时间打印?
答案 0 :(得分:1)
如果没有提供准确的Java代码,您需要执行以下操作:
[0, 0.5>
,[0.5, 0.8>
; [0.8, 1.0>
。你可以从这里弄明白吗?
事后补充:在您的情况下,用户输入的值加起来为100%。一般来说,这可能不是真的;然后你首先计算“表观间隔”,最后将它们缩放到最大值1.假设用户输入50,30,30%(不能算数......)。你的间隔是
0, .5
.5, .8
.8, 1.1
你必须将所有内容除以1.1
以获得正确的间隔。或者您可以将随机数乘以1.1
。
答案 1 :(得分:1)
我能想到的最简单的方法是创建一个具有相同比例的数组的数组(这里我创建了10个字符串,包括5个低点,3个中等和2个高点)
String[] probabilities = { "low", "low", "low", "low", "low", "medium", "medium", "medium", "high", "high };
然后使用随机数从数组中选择一个元素
Random random = new Random(); // might want to give it a seed here
int randomIndex = random.nextInt(probabilities.length);
String probability = probabilities[randomIndex];
对于大样本,这应该为您提供所需的分布。