我會用一個HashMap來存儲擲(1至6)值,以及存儲的次數,你(一個對每個增量)得到了價值:
public static void main(String[] args) {
Scanner inputReader = new Scanner(System.in);
System.out.println("How many times do you want to throw the dice:");
int amount = inputReader.nextInt();
Map<Integer, Integer> rolls = new HashMap<>();
for (int i = 1; i < 7; i++) {
rolls.put(i, 0);
}
for (int i = 0; i < amount; i++) {
int value = (int) (Math.random() * 6 + 1);
rolls.put(value, rolls.get(value) + 1);
}
for (Map.Entry<Integer, Integer> entry : rolls.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
}
第一個for-loop會初始化散列表中的鍵1到6。
第二個for-loop計算X個擲骰子數並將它們添加到hashmap中。
第三個for-loop循環遍歷hashmap中的值並打印出結果。
輸出:
How many times do you want to throw the dice:
500
1: 92
2: 88
3: 72
4: 78
5: 81
6: 89
編輯:如果你想要得到的平均值,你可以做以下的位數:
double average = 0;
int[] storedSums = new int[6];
int i = 0;
for (Map.Entry<Integer, Integer> entry : rolls.entrySet()) {
int sum = entry.getValue();
average += sum;
storedSums[i++] = sum;
System.out.println(entry.getKey() + ": " + sum);
}
Arrays.sort(storedSums);
System.out.println("Average: " + (average/6));
System.out.println("Median: " + storedSums[2]);
平均簡直值相加的過程併除以金額。但是,使用hashmap的中位數有點棘手。更好的選擇是使用Array或ArrayList來存儲不同的值,然後對它們進行排序,最後選擇中間元素(索引2或3)。
在這種情況下,我選擇了一個數組,因爲我們知道它的大小。
編輯:關於你的最後一個請求:
要獲得中間值相當於骰子,我只需將數組轉換成列表,並使用indexOf方法與已知值:
int medianDice = Arrays.asList(storedSums).indexOf(storedSums[2]);
System.out.println("Median: " + storedSums[2] + ", which belongs to dice: " + medianDice + ".");
獲得平均值的骰子有點複雜(因爲這個數字不是由一個模具表示)。您必須使用平均值來查找數組中最接近的值,然後輸出該值的索引。
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html – OldProgrammer