我正在尝试制作一个程序,让用户选择他想要掷骰子的次数,然后应该计算投掷骰子的每个值。在程序结束时,用户应该看到他扔了1,2,3等多少次。这是一个程序,看看每个数字是否有相同的显示机会。
我在代码的开头遇到了问题,因为我不知道怎么让电脑扔掉骰子让我说1000次,然后保存那些抛出的骰子的每一个值。这就是我到目前为止所做的:
import java.util.Scanner;
public class Uppgift4_5
{
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();
int [] dice = { 1, 2, 3, 4, 5, 6 };
int random = 0;
for (int i = 0; i < amount; i++)
{
random = (int) (Math.random () + 1);
}
}
}
我面临的问题是它只保存一个随机数,然后将该数字循环6次。 你可以看到我没有走远,我只需要知道如何保存和计算每个掷骰子的数量。然后我想我将使用一个开关和案例以某种方式保存(任何建议也会有帮助)。任何建议或答案都会有所帮助。感谢。
答案 0 :(得分:3)
我会使用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 + ".");
获得平均值的骰子值有点复杂(因为这个数字不是由其中一个骰子代表的)。您必须使用平均值来查找数组中最接近的值,然后输出该值的索引。
答案 1 :(得分:1)
您可以使用ArrayList
存储随机数,然后在需要时对其进行处理。
List<Integer> listOfNumbers = new ArrayList<>(amount);
Random generator = new Random();
for (int i = 0; i < amount; i++)
{
listOfNumbers.add(generator.nextInt(7));
}
此外,您当前的随机数算法不正确,您应该使用Random
类生成1 - 6
(包括)之间的随机数。
答案 2 :(得分:1)
您反复写入相同的random
int
值,因此请使用int
数组来存储值,如下所示:
int[] random = new int[amount];//declare an array
Random randomNumber = new Random();
for (int i = 0; i < amount; i++) {
random[i] = randomNumber.nextInt(7);
}
另外,使用java.util.Random nextInt()
的上限(在你的情况下,骰子的最大值可以是6,所以使用上限为7)来生成如上所示的随机数
答案 3 :(得分:0)
LTRIM(RTRIM(COL_NAME))
答案 4 :(得分:0)
带流的版本:
new Random()
.ints(amount, 1, 7).boxed()
.collect(Collectors.groupingBy(s -> s))
.forEach((k, v) -> System.out.println(k + ": "+v.size()));;