Java 骰子滚动模拟,计算总和、频率和百分比
我很难计算出一对骰子滚动的次数。我被告知我必须使用一维整数数组来计算每个可能的和在36000卷中出现的次数。我不确定我应该做什么,因为我们刚刚开始检查阵列。以下是指向说明的链接: 以下是我目前掌握的代码: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
/*
* 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%