我会使用 HashMap 来存储 throw 的值(1 到 6),以及存储你获得该值的次数(每次递增 1):
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 循环初始化 hashmap 中的键 1 到 6。
第二个 for 循环计算 X 次掷骰子并将它们添加到哈希图中。
第三个 for 循环遍历 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 + ".");
获取骰子的平均值有点复杂(因为这个数字不是由其中一个骰子表示的)。您必须使用平均值来找到数组中最接近的值,然后输出该值的索引。