私は、サイコロ ゲーム (通常の 6 面ダイス) をプレイする短いプログラムを作成しようとしています。最初のロールの番号がスコアに追加されます。最初のロールの後、6 をロールすると、ゲームが停止し、スコアが記録されます (6 は追加されません)。最初のロールで 6 がロールされた場合、それは問題なく、他の 1 から 5 までの数字と同じように追加されます。私はこのゲームを何度も実行して、バスト前のスコアの長いリストを作成しようとしています (aバストが丸められている 6)。これらのスコアを最小から最大の順に並べ替え、停止するのに最適なスコアであるリストの中央値を見つけます。
なんらかの理由で、プログラムを実行すると 13 を取得し続けますが、答えが 15 であることはわかっています。Java で Random を使用すると、中央値に何らかの影響がありますか? Random がどのように数字を生成するのか、またそれらが均等な機会で生成されるのかどうかは正確にはわかりません。また、飛び出してうまくいかないものはありますか?
import java.util.*;
public class DiceRoller {
private static Random r = new Random();
private static final int games = 10001;
private static int[] totalScores = new int[games];
private static int index = 0;
public static void main(String[] args) {
int score = 0; boolean firstRoll = true;
while (index < games) {
int roll = roll();
if (firstRoll) {
score += roll;
firstRoll = false;
} else {
if (roll == 6) {
totalScores[index] = score;
index++;
score = 0; firstRoll = true;
} else {
score += roll;
}
}
}
System.out.println("The median is " + median() + ".");
}
public static int roll() {
return r.nextInt(6) + 1;
}
public static int median() {
Arrays.sort(totalScores);
int temp = totalScores[games / 2];
return temp;
}
}