首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中更改概率

在java中更改概率
EN

Stack Overflow用户
提问于 2014-02-06 07:44:07
回答 2查看 379关注 0票数 0

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

例如,用户输入low = 50%,medium = 30%,high = 20%。现在我的问题从这里开始。如何使程序在一轮中打印低50%的时间,中30%的时间和高20%的时间?

EN

回答 2

Stack Overflow用户

发布于 2014-02-06 07:47:48

在不给出确切的Java代码的情况下,以下是您需要做的:

  1. 创建一组间隔。在你的例子中,它是[0, 0.5>[0.5, 0.8>[0.8, 1.0>.
  2. Generate一个介于0和1之间的随机数,看看它落在多大的间隔内。它将落入第一个间隔50%的时间,第二个间隔30%的时间,第三个间隔20%的time

你能从这里弄明白吗?

事后想一想:在您的例子中,用户输入的值加起来是100%。一般来说,这可能不是真的;然后你首先计算“表观间隔”,最后将它们缩放到最大值1。假设用户输入了50,30,30% (无法计算...)。你的时间间隔是

代码语言:javascript
复制
0, .5
.5, .8
.8, 1.1

你必须除以1.1才能得到正确的区间。或者你可以将你的随机数乘以1.1

票数 1
EN

Stack Overflow用户

发布于 2014-02-06 08:55:30

我能想到的最简单的方法是创建一个等比例的数组(这里我创建了10个字符串,其中有5个低点,3个中点和2个高点)

代码语言:javascript
复制
String[] probabilities = { "low", "low", "low", "low", "low", "medium", "medium", "medium", "high", "high };

然后使用随机数从数组中选取一个元素

代码语言:javascript
复制
Random random = new Random(); // might want to give it a seed here
int randomIndex = random.nextInt(probabilities.length);
String probability = probabilities[randomIndex];

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21591096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档