改变java中的概率

时间:2014-02-05 23:44:07

标签: java probability

我一直在尝试为一个简单的战斗模拟器编写这个程序,我要做的任务是询问用户在一轮战斗中的低,中,高攻击的百分比。

因此,例如,用户输入低= 50%,中等= 30%,高= 20%。现在我的问题源于此。如何做到这样,在一轮中,程序将在50%的时间内打印,在30%的时间打印,在20%的时间打印?

2 个答案:

答案 0 :(得分:1)

如果没有提供准确的Java代码,您需要执行以下操作:

  1. 创建一组间隔。在您的情况下,它是[0, 0.5>[0.5, 0.8>; [0.8, 1.0>
  2. 生成介于0和1之间的随机数
  3. 查看它所处的时间间隔。它将在50%的时间内落入第一个间隔,第二个间隔占30%的时间,第三个间隔占20%的时间
  4. 你可以从这里弄明白吗?

    事后补充:在您的情况下,用户输入的值加起来为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];

对于大样本,这应该为您提供所需的分布。