我无法计算出一对骰子滚动总和的频率。我被告知我必须使用一维整数数组来计算每个可能总和出现在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);
}
}
}
任何帮助都将不胜感激。
谢谢,雅各布
答案 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%