通过计算总和,频率和百分比来模拟掷骰子

时间:2014-04-16 05:56:26

标签: java arrays dice

我无法计算出一对骰子滚动总和的频率。我被告知我必须使用一维整数数组来计算每个可能总和出现在36000卷中的次数。我不确定自从我们开始讨论数组后我应该做什么。以下是指示的链接:http://s65.photobucket.com/user/jls7884/media/DicePic-page-001_zpsd45d977f.jpg.html?filters[user]=139936213&filters[recent]=1&sort=1&o=0

这是我到目前为止的代码:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package Dice;

/**
 *
 * @author Jacob
 */
import java.util.Random;
public class Dice 
{
public static void count1 ()
{
    int count;

    int frequency[] = new int[7];
    frequency[1] = 2;

    count = 1;
    while (count <= 6)
    {
        frequency[count] = count + 1;
        count++;
    }

    System.out.printf 
    (
    "%-2d %-2d %-2d %-2d %-2d %-2d \n"
    , frequency [1] , frequency [2] , frequency [3] , frequency [4] , frequency [5] , frequency [6]       
    );
}

public static void count2 ()
{
    int count;

    int frequency[] = new int[8];
    frequency[1] = 3;

    count = 1;
    while (count <= 6)
    {
        frequency[count] = count + 2;
        count++;
    }

    System.out.printf 
    (
    "%-2d %-2d %-2d %-2d %-2d %-2d \n"
    , frequency [1] , frequency [2] , frequency [3] , frequency [4] , frequency [5] , frequency [6]       
    );
}

public static void count3 ()
{
    int count;

    int frequency[] = new int[7];
    frequency[1] = 4;

    count = 1;
    while (count <= 6)
    {
        frequency[count] = count + 3;
        count++;
    }

    System.out.printf 
    (
    "%-2d %-2d %-2d %-2d %-2d %-2d \n"
    , frequency [1] , frequency [2] , frequency [3] , frequency [4] , frequency [5] , frequency [6]       
    );
}

public static void count4 ()
{
    int count;

    int frequency[] = new int[7];
    frequency[1] = 5;

    count = 1;
    while (count <= 6)
    {
        frequency[count] = count + 4;
        count++;
    }

    System.out.printf 
    (
    "%-2d %-2d %-2d %-2d %-2d %-2d \n"
    , frequency [1] , frequency [2] , frequency [3] , frequency [4] , frequency [5] , frequency [6]       
    );
}

public static void count5 ()
{
    int count;

    int frequency[] = new int[7];
    frequency[1] = 6;

    count = 1;
    while (count <= 6)
    {
        frequency[count] = count + 5;
        count++;
    }

    System.out.printf 
    (
    "%-2d %-2d %-2d %-2d %-2d %-2d \n"
    , frequency [1] , frequency [2] , frequency [3] , frequency [4] , frequency [5] , frequency [6]       
    );
}

public static void count6 ()
{
    int count;

    int frequency[] = new int[7];
    frequency[1] = 7;

    count = 1;
    while (count <= 6)
    {
        frequency[count] = count + 6;
        count++;
    }

    System.out.printf 
    (
    "%-2d %-2d %-2d %-2d %-2d %-2d \n"
    , frequency [1] , frequency [2] , frequency [3] , frequency [4] , frequency [5] , frequency [6]       
    );
}

public static void main(String[] args)
{
    int num1 = 1;
    int num2 = 2;
    int num3 = 3;
    int num4 = 4;
    int num5 = 5;
    int num6 = 6;

    int num = 0;
    while (num < 7)
    {
        System.out.printf ("%-3d", num++);
    }

    System.out.println ();
    System.out.printf ("%d: ", num1);
    Dice.count1 ();
    System.out.printf ("%d: ", num2);
    Dice.count2 ();
    System.out.printf ("%d: ", num3);
    Dice.count3 ();
    System.out.printf ("%d: ", num4);
    Dice.count4 ();
    System.out.printf ("%d: ", num5);
    Dice.count5 ();
    System.out.printf ("%d: ", num6);
    Dice.count6 ();

    String sumStr = "Sum";
    String frequencyStr = "Frequency";
    String percentageStr = "Percentage";
    System.out.printf ("%-5s %-12s %s", sumStr, frequencyStr, percentageStr);
    System.out.println ();

    Random rollDie = new Random ();

    for (int i = 1; i <= 36000; i++)
    {
        int die1 = 1 + rollDie.nextInt ((6));
        int die2 = 1 + rollDie.nextInt ((6));

        int sum = die1 + die2;
    }

    int count = 2;
    while (count <= 12)
    {    
        int frequency = 1003;
        double minusFrequency = 36000 - frequency;
        double divideTotal = minusFrequency / 36000;
        double percentageTotal = divideTotal * 100;
        double calculatePercentage = 100 - percentageTotal;
        double percentage = calculatePercentage;

        int sumCount = count++;
        System.out.printf ("%3d %11d %12.1f%% \n",sumCount, frequency, percentage);
    }
}

}

任何帮助都将不胜感激。

谢谢,雅各布

3 个答案:

答案 0 :(得分:1)

你怎么在纸上做?

您可以将一张纸分成12列(一个用于1,一个用于2,等等到12)。然后你将掷骰子3600次,每次你得到7,你会在第7列中添加一个标记。然后你会计算每列中的标记,并将总和除以3600得到它们频率。

在Java中做同样的事情:拥有一个包含12个元素的int[] counts数组。然后执行从0到3600的循环。在每次迭代时,滚动骰子,并递增与您获得的值对应的数组元素。所以,例如,如果你得到第7个,哟会增加数组的第7个元素。

答案 1 :(得分:0)

也许说明要求您创建所有单独的方法,但我个人会将其编码为如下所示。这将填充您的数组,然后您可以使用它来计算/打印使用for循环询问的任何内容。例如,如果要计算总和2从36,000个卷中滚出的百分比,您可以执行以下操作:双倍百分比=频率[0] / 36000;

Random ranNum = new Random();
int[] frequencies = new int[11];
int face1;
int face2;
int sum;

Arrays.fill(frequencies, 0);

for(int count = 1; count <= 36000; count++)
{
  face1 = 1+randomNumbers.nextInt(6);
  face2 = 1+randomNumbers.nextInt(6);
  sum = face1 + face2;

  switch(sum)
  {
    case 2: frequencies[0] += 1;
    break;
    case 3: frequencies[1] += 1;
    break;
    case 4: frequencies[2] += 1;
    break;
    case 5: frequencies[3] += 1;
    break;
    case 6: frequencies[4] += 1;
    break;
    case 7: frequencies[5] += 1;
    break;
    case 8: frequencies[6] += 1;
    break;
    case 9: frequencies[7] += 1;
    break;
    case 10: frequencies[8] += 1;
    break;
    case 11: frequencies[9] += 1;
    break;
    case 12: frequencies[10] += 1;
    break;
  }
}

答案 2 :(得分:0)

我有一个朋友在课堂上帮助我。我为之前的评论道歉。我没有仔细查看代码以了解它在做什么。根据我现在的理解,通过查看代码和JB nizet的逻辑,switch语句获取与数组的每个元素对应的总和的值,并根据找到的相应和值的数量递增。我最初声明并初始化了for循环内部的数组以及print语句,因此我获得了36000个值。然后我在循环之外移动了我的数组声明和赋值,所以我可以在整个程序中使用它然后我已经修复了我的while循环来自[0,10]并添加了两个来计数以获得可能的总和然后,值[2,12]通过将计数值传递给频率数组来打印出频率。在编写方程式来计算百分比时,我遇到了将0.0%作为我的百分比值的问题。我能够通过将我的整数数组转换为double来解决这个问题。作为参考,这里是我最终得到的代码和相应输出的样本:

代码:

import java.util.Arrays;
import java.util.Random;
public class Dice 
{
public static void main(String[] args)
{
    String sumStr = "Sum";
    String frequencyStr = "Frequency";
    String percentageStr = "Percentage";
    System.out.printf ("%-5s %-12s %s", sumStr, frequencyStr, percentageStr);
    System.out.println ();

    Random rollDie = new Random ();

    int frequencies[] = new int [11];

    Arrays.fill(frequencies, 0);

    for (int i = 1; i <= 36000; i++)
    {
        int die1 = rollDie.nextInt (6) + 1;
        int die2 = rollDie.nextInt (6) + 1;

        int sum = die1 + die2;

        switch (sum)
        {
            case 2: frequencies[0]++;
            break;

            case 3: frequencies[1]++;
            break;

            case 4: frequencies[2]++;
            break;

            case 5: frequencies[3]++;
            break;

            case 6: frequencies[4]++;
            break;

            case 7: frequencies[5]++;
            break;

            case 8: frequencies[6]++;
            break;

            case 9: frequencies[7]++;
            break;

            case 10: frequencies[8]++;
            break;

            case 11: frequencies[9]++;
            break;

            case 12: frequencies[10]++;
            break;

            default:
            break;
        } 
    }

    int count = 0;
    while (count <= 10)
    {    
        double percentage = ((double) frequencies[count] / 36000) * 100;

        System.out.printf ("%3d %11d %12.1f%% \n",count + 2, frequencies[count], percentage);
        int sumCount = count++;
        }
    }
}

输出:

Sum   Frequency    Percentage
  2        1013          2.8% 
  3        1953          5.4% 
  4        2997          8.3% 
  5        4012         11.1% 
  6        5015         13.9% 
  7        6093         16.9% 
  8        4966         13.8% 
  9        3999         11.1% 
 10        3024          8.4% 
 11        1944          5.4% 
 12         984          2.7%