Java 骰子滚动模拟,计算总和、频率和百分比

Java 骰子滚动模拟,计算总和、频率和百分比,java,arrays,dice,Java,Arrays,Dice,我很难计算出一对骰子滚动的次数。我被告知我必须使用一维整数数组来计算每个可能的和在36000卷中出现的次数。我不确定我应该做什么,因为我们刚刚开始检查阵列。以下是指向说明的链接: 以下是我目前掌握的代码: /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and

我很难计算出一对骰子滚动的次数。我被告知我必须使用一维整数数组来计算每个可能的和在36000卷中出现的次数。我不确定我应该做什么,因为我们刚刚开始检查阵列。以下是指向说明的链接:

以下是我目前掌握的代码:

/*
 * 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);
    }
}
/*
*要更改此许可证标题,请在“项目属性”中选择“许可证标题”。
*要更改此模板文件,请选择工具|模板
*然后在编辑器中打开模板。
*/
包装骰子;
/**
*
*@作者雅各布
*/
导入java.util.Random;
公共类骰子
{
公共静态无效计数1()
{
整数计数;
整数频率[]=新整数[7];
频率[1]=2;
计数=1;

而(count你会怎么做呢

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


在Java中也可以这样做:使用
int[]对12个元素的数组进行计数。然后从0到3600进行循环。在每次迭代中,掷骰子,并增加与您得到的值相对应的数组元素。因此,例如,如果您得到第7个元素,您将增加数组的第7个元素。

也许指令要求您创建所有单独的方法,但我个人认为您可以对其进行如下编码。这将填充您的数组,然后您可以使用该数组计算/打印使用for循环所请求的任何内容。例如,如果您想计算总和2在36000个卷中的百分比,您可以这样做:double percentage=frequencies[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;
  }
}
Random ranNum=new Random();
int[]频率=新int[11];
int face1;
int face2;
整数和;
数组。填充(频率,0);

对于(int count=1;count我有一个朋友在课堂上帮助我。我为我以前的评论道歉。我没有仔细阅读代码以理解它在做什么。从我现在通过查看您的代码和JB nizet的逻辑了解到,switch语句取与arr的每个元素对应的和的值ay和增量取决于找到的相应和值的数量。我最初在for循环以及print语句中声明并初始化了数组,因此我得到了36000个值。然后我将数组声明和赋值移到循环之外,以便在整个程序中使用它然后我将while循环从[0,10]改为[2,12],并在count中加上2,以得到可能的和值[2,12]然后通过将count的值传递给频率数组来打印频率。在编写计算百分比的公式时,我遇到了将0.0%作为百分比值的问题。我可以通过将整数数组转换为双精度来解决这个问题。作为参考,这里是我最后得到的代码和corre的示例响应输出:

代码:


switch语句可以替换为
频率[sum-2]+=1;
我试图实现您的方法,但在对公式进行编码以计算百分比时,它将打印多个值,其中所有值均为0。我测试了您的方法,为其中一个数组元素添加了一个打印语句,它将生成我假设为36000个不同的值。我不明白为什么会得到36000个不同的值nt值。我所需要做的就是计算每个总和出现的次数,我会假设每次都不同。我可以使用一个硬编码数组,在滚动骰子对时包含可能的组合来计算频率和百分比。数组将按如下方式声明和启动:int[]intArray={2,3,4,5,6,7,3,4,5,6,7,5,6,7,8,9,5,6,6,7,8,9,10,6,7,7,8,9,9,10,11,7,7,8,9,10,11,12};数组只需要12个元素(0-11)。骰子的每个可能组合(2,3,4,5,6,7,8,9,10,12)需要1个元素。然后开关将使用和变量的值(面1和面2的和)加1(使用“+=1”)以保持每次骰子“滚动”一个值时的计数。
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%