我会用一个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