我正在 Absolute Java,第 5 章,练习 3 中做一个练习。面对一个让我感到困惑的问题。
先介绍一下背景吧。
问题是:
在 Puzzlevania 的土地上,Aron、Bob 和 Charlie 争论了他们中的哪一个是有史以来最伟大的谜题者。
为了一劳永逸地结束这场争论,他们同意进行一场生死决斗。Aaron 的射手很差,只有 1>3 的概率击中他的目标。Bob 稍微好一点,以 1>2 的概率击中了他的目标。查理是一个专业的射手,从来没有错过。
击中意味着杀死,被击中的人退出决斗。为了弥补枪法上的不公平,三人决定轮流开火,从亚伦开始,然后是鲍勃,然后是查理。这个循环会重复,直到有一个人站着,那个人将成为有史以来最伟大的谜题人。一个明显且合理的策略是让每个人向还活着的最准确的射手射击,理由是这个射手是最致命的,并且有最好的反击机会。
编写一个程序来模拟使用这种策略的决斗。您的程序应该使用随机数和问题中给出的概率来确定射手是否击中目标。创建一个名为 Duelist 的类,其中包含决斗者的姓名和射击精度,一个指示决斗者是否还活着的布尔值,以及一个方法 ShootAtTarget ( Duelist target ),如果决斗者击中他的目标(使用随机数和射击精度),否则什么也不做。
一旦您可以模拟单次决斗,请在您的程序中添加一个循环来模拟 10,000 次决斗。计算每个参赛者获胜的次数并打印每个参赛者获胜的概率(例如,对于 Aaron,您的程序可能会输出“Aaron 赢得 3,595>10,000 次决斗或 35.95%”)。另一种策略是让亚伦故意错过他的第一杆。修改程序以适应这种新策略并输出每位参赛者获胜的概率。哪种策略对 Aaron 来说更好:故意错过第一枪还是尝试击中最好的射手?谁最有可能获胜,最好的射手还是最差的射手?
我的问题是:
如何使用随机数和问题中给出的概率来确定射手是否击中目标?
我不明白为什么要使用随机数和概率,它们之间有什么关系吗?