私はAbsoluteJava、第5章、演習3で1つの演習を行っています。そして、私を混乱させる問題に直面しています。
まず背景をご紹介します。
質問は:
パズルバニアの地で、アロン、ボブ、チャーリーは、そのうちの1人が史上最高のパズルを解く人であるという議論をしました。
議論を終わらせるために、彼らは死への決闘に同意した。アーロンは射手が貧弱で、1>3の確率でターゲットに命中しました。ボブは少し良く、1>2の確率で目標を達成しました。チャーリーは熟練した射手であり、決して逃しませんでした。
ヒットはキルを意味し、ヒットした人は決闘から脱落します。射撃スキルの不平等を補うために、3人は、アーロン、ボブ、チャーリーの順に発砲することを決定しました。このサイクルは、一人の男が立つまで繰り返され、その男は史上最高のパズルを解く人になります。明白で合理的な戦略は、この射手が最も致命的であり、反撃する可能性が最も高いという理由で、各人がまだ生きている最も正確な射手を撃つことです。
この戦略を使用して決闘をシミュレートするプログラムを作成します。プログラムでは、問題で与えられた乱数と確率を使用して、射手がターゲットに当たるかどうかを判断する必要があります。決闘者の名前と射撃精度、決闘者がまだ生きているかどうかを示すブール値、および決闘者がターゲットに当たった場合にターゲットをデッドに設定するメソッドShootAtTarget(デュエリストターゲット)を含むDuelistという名前のクラスを作成します(乱数と射撃精度)、それ以外は何もしません。
単一の決闘をシミュレートできるようになったら、10,000の決闘をシミュレートするループをプログラムに追加します。各出場者が勝った回数を数え、各出場者の勝率を印刷します(たとえば、アーロンの場合、プログラムは「アーロンが3,595> 10,000の決闘または35.95%を勝ち取った」と出力する場合があります)。別の戦略は、アーロンが意図的に最初のショットを逃すことです。この新しい戦略に対応するようにプログラムを変更し、各競技者の勝率を出力します。アーロンにとってどちらの戦略が良いですか:最初のショットを意図的に逃すか、最高のシューティングゲームを打つことを試みますか?勝つ可能性が最も高いのは誰ですか、最高のシューティングゲームまたは最悪のシューティングゲームですか?
私の質問は:
問題で与えられた乱数と確率を使用して、射手がターゲットに当たるかどうかを判断するにはどうすればよいですか?
なぜ乱数と確率を使うべきなのか分かりませんが、それらの間に何か関係はありますか?