用Java模拟随机事件

用Java模拟随机事件,java,Java,我在绝对Java中做一个练习,第5章,练习3。面对一个让我困惑的问题。 让我先介绍一下背景 问题是: 在拼图瓦尼亚的土地上,阿隆、鲍勃和查理就其中哪一个是有史以来最伟大的拼图家展开了争论 为了一劳永逸地结束这场争论,他们同意决斗到底。Aaron是一个糟糕的射手,命中目标的概率只有1>3。鲍勃稍微好一点,命中目标的概率为1>2。查理是一个专业的射手,从来没有错过过 命中意味着杀死,被击中的人退出决斗。为了弥补射击技术上的不公平,三人决定轮流射击,先是亚伦,然后是鲍勃,然后是查理。这个循环会一直重复

我在绝对Java中做一个练习,第5章,练习3。面对一个让我困惑的问题。
让我先介绍一下背景

问题是

在拼图瓦尼亚的土地上,阿隆、鲍勃和查理就其中哪一个是有史以来最伟大的拼图家展开了争论

为了一劳永逸地结束这场争论,他们同意决斗到底。Aaron是一个糟糕的射手,命中目标的概率只有1>3。鲍勃稍微好一点,命中目标的概率为1>2。查理是一个专业的射手,从来没有错过过

命中意味着杀死,被击中的人退出决斗。为了弥补射击技术上的不公平,三人决定轮流射击,先是亚伦,然后是鲍勃,然后是查理。这个循环会一直重复,直到有一个人站着,而这个人将是有史以来最伟大的谜团。一个明显而合理的策略是,每个人都要射向仍然活着的最准确的射手,因为这个射手是最致命的,并且有最好的反击机会

使用此策略编写一个程序来模拟决斗您的程序应该使用 随机数和问题中给出的概率来确定 射手击中目标。创建一个名为 包含决斗者的决斗列表 名称和射击精度,一个布尔值,指示决斗者是否还活着, 和一种方法 ShootAtTarget(决斗目标),在以下情况下将目标设置为死亡 决斗者击中目标(使用随机数和射击精度)并 否则什么也不做

一旦你可以模拟一个单一的决斗,添加一个循环到你的程序模拟 一万次决斗。计算每个参赛者获胜的次数并打印 每位参赛者获胜的概率(例如,对于Aaron,您的项目可能 输出“Aaron赢得3595>10000次决斗或35.95%”。 另一种策略是Aaron故意错过第一次投篮。修改 计划以适应此新策略并输出获胜概率 为每个参赛者。哪种策略对Aaron更好:故意错过 第一枪还是试着打最好的射手?谁最有可能获胜, 最佳射手还是最差射手

我的问题是:

如何使用问题中给出的随机数和概率来确定射手是否击中目标?

我不明白为什么要使用随机数和概率,它们之间有什么关系吗?

用生成一个随机数(范围
[0,1)
),然后简单地检查它是否小于给定的概率。因此,如果有人的准确率为20%,我们将

Math.random() < 0.20
上面所写的工作原理是相同的,但概率不是50%

现在,如果你想知道为什么
Math.random()<0.5
有50%的概率是
true
,你应该从几何角度来考虑它。
Math.random()
返回一个从
0
1
的随机数,
0.5
将此间隔减半。因此,随机数有50%的几率落在
0.5
的右侧,50%的几率落在左侧


由于
Math.random()<0.5
本质上是问“是
.5
左边的随机数吗”,所以它有50%的概率是
真的
和50%的概率是
假的
它们并不意味着完全是随机数。要模拟射手“射击”,你应该生成“命中”或“未命中”使用给定的加权概率。

“我不明白为什么要使用随机数和概率…”
:因为这就是作业要求你做的事?
“…它们之间有关系吗?”
:随机数可以模拟随机事件,你可以用概率来控制行为。你尝试过什么?@满是鳗鱼的气垫船为什么要用随机数来比较概率?我的意思是为什么这代表着你是否射中了目标。因为你试图用问题来模拟现实。随机数MBER会像掷骰子游戏一样掷骰子,权重将代表成功的相对机会。你张贴了大量的文本;可能想考虑只发布你的问题所必需的东西。是的,我确实想到了,但是为什么要用它来检查是否拍摄目标?@艾薇,因为我们本质上想要一个随机的VA。一个已知可能为
true
(在我使用的示例中,概率为20%)的变量。上面的表达式产生这样一个变量,因此可以用来模拟命中/未命中。@a.R.S.很好!得到了!感谢您的帮助。
boolean isHeads = Math.random() < 0.5;