Java,计算随机数并保存它的程序

时间:2017-05-04 20:46:43

标签: java arrays random count

我正在尝试制作一个程序,让用户选择他想要掷骰子的次数,然后应该计算投掷骰子的每个值。在程序结束时,用户应该看到他扔了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次。 你可以看到我没有走远,我只需要知道如何保存和计算每个掷骰子的数量。然后我想我将使用一个开关和案例以某种方式保存(任何建议也会有帮助)。任何建议或答案都会有所帮助。感谢。

5 个答案:

答案 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()));;