骰子直方图
Dice Roll Histogram
我有一个 class 问题,我似乎无法理解其逻辑。
修改下面的程序来打印一个直方图,其中掷骰子的总次数等于每个可能的值,通过打印一个像*那个次数的字符来显示,如下所示。
显示每个可能值的掷骰总数的直方图。
骰子直方图:
2: ******
3: ****
4: ***
5: ********
6: *******************
7: *************
8: *************
9: **************
10: ***********
11: *****
12: ****
我不明白这个直方图到底在显示什么。这让我发疯,如果我不明白自己在做什么,我就无法按照自己的逻辑前进。我知道之前有人问过这个问题,但看起来他们都有特定数量的骰子角色。我没有得到一个数字,这就是让我失望的原因。我知道这真是一个愚蠢的问题。但是任何人都可以向我解释 "Histogram showing total number of dice rolls for each possible value" 是什么意思,这个可能的值是什么?我完全不知所措......感谢任何帮助。这是我到目前为止编写的代码。
import java.util.Scanner;
import java.util.Random;
public class DiceStats {
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
Random randGen = new Random();
int i = 0; // Loop counter iterates numRolls times
int numRolls = 0; // User defined number of rolls
int numOnes = 0; // Tracks number of 1's found
int numTwos = 0; // Tracks number of 2's found
int numThrees = 0; // Tracks number of 3's found
int numFours = 0; // Tracks number of 4's found
int numFives = 0; // Tracks number of 5's found
int numSixes = 0; // Tracks number of 6's found
int numSevens = 0; // Tracks number of 7's found
int numEights = 0; // Tracks number of 8's found
int numNines = 0; // Tracks number of 9's found
int numTens = 0; // Tracks number of 10's found
int numElevens = 0; // Tracks number of 11's found
int numTwelves = 0; // Tracks number of 12's found
int die1 = 0; // Dice values
int die2 = 0; // Dice values
int rollTotal = 0; // Sum of dice values
System.out.println("Enter number of rolls: ");
numRolls = scnr.nextInt();
if (numRolls >= 1) {
// Roll dice numRoll times
for (i = 0; i < numRolls; ++i) {
die1 = randGen.nextInt(6) + 1;
die2 = randGen.nextInt(6) + 1;
rollTotal = die1 + die2;
// Count number of sixes and sevens
if (rollTotal == 1) {
numOnes = numOnes + 1;
}
if (rollTotal == 2) {
numTwos = numTwos + 1;
}
if (rollTotal == 3) {
numThrees = numThrees + 1;
}
if (rollTotal == 4) {
numFours = numFours + 1;
}
if (rollTotal == 5) {
numFives = numFives + 1;
}
if (rollTotal == 6) {
numSixes = numSixes + 1;
}
if (rollTotal == 7) {
numSevens = numSevens + 1;
}
if (rollTotal == 8) {
numEights = numEights + 1;
}
if (rollTotal == 9) {
numNines = numNines + 1;
}
if (rollTotal == 10) {
numTens = numTens + 1;
}
if (rollTotal == 11) {
numElevens = numElevens + 1;
}
else if (rollTotal == 12) {
numTwelves = numTwelves + 1;
}
System.out.println("Roll " + (i+1) + " is " + rollTotal + " (" + die1 +
"+" + die2 + ")");
}
// Prints a histogram of the number of dice rolls
System.out.println("\nDice roll histogram:");
System.out.println("1's: " + numOnes);
System.out.println("2's: " + numTwos);
System.out.println("3's: " + numThrees);
System.out.println("4's: " + numFours);
System.out.println("5's: " + numFives);
System.out.println("6's: " + numSixes);
System.out.println("7's: " + numSevens);
System.out.println("8's: " + numEights);
System.out.println("9's: " + numNines);
System.out.println("10's: " + numTens);
System.out.println("11's: " + numElevens);
System.out.println("12's: " + numTwelves);
}
else {
System.out.println("Invalid rolls. Try again.");
}
return;
}
}
您可以看到我输入直方图条目的位置。我基本上认为我需要编辑我从 "numOnes" 等整数给出的值到星号,但现在我不确定......任何帮助表示赞赏!
已编辑代码 -
System.out.println("\nDice roll histogram:");
System.out.print("2's: ");
for(i = 0; i < numTwos; i++){
System.out.print("*");
}
System.out.println("");
System.out.print("3's: ");
for (i = 0; i < numThrees; i++);{
System.out.print("*");
}
System.out.println("");
System.out.print("4's: " );
for (i = 0; i < numFours; i++);{
System.out.print("*");
}
System.out.println("");
System.out.print("5's: ");
for (i = 0; i < numFives; i++);{
System.out.print("*");
}
System.out.println("");
System.out.print("6's: ");
for (i = 0; i < numSixes; i++);{
System.out.print("*");
}
System.out.println("");
System.out.print("7's: ");
for (i = 0; i < numSevens; i++);{
System.out.print("*");
}
System.out.println("");
System.out.print("8's: ");
for (i = 0; i < numEights; i++);{
System.out.print("*");
}
System.out.println("");
System.out.print("9's: ");
for (i = 0; i < numNines; i++);{
System.out.print("*");
}
System.out.println("");
System.out.print("10's: ");
for (i = 0; i < numTens; i++);{
System.out.print("*");
}
System.out.println("");
System.out.print("11's: ");
for (i = 0; i < numElevens; i++);{
System.out.print("*");
}
System.out.println("");
System.out.print("12's: ");
for (i = 0; i < numTwelves; i++);{
System.out.print("*");
}
System.out.println("");
}
输出 -
Enter number of rolls:
5
Roll 1 is 8 (2+6)
Roll 2 is 9 (6+3)
Roll 3 is 9 (5+4)
Roll 4 is 6 (4+2)
Roll 5 is 9 (6+3)
Dice roll histogram:
2's:
3's: *
4's: *
5's: *
6's: *
7's: *
8's: *
9's: *
10's: *
11's: *
12's: *
我可以输入更多的卷,我会得到一个星号表示 2,它会根据我的需要增加,但它不会增加其余的数字,它们都只会得到一个星号。是什么阻止我的代码正确增加 * 的数量?我已经为此奋斗了几个小时:/
"I do not understand what in the world this histogram is displaying."
嗯,正如你所说:
"Histogram showing total number of dice rolls for each possible value"
直方图:
2: ******
3: ****
4: ***
5: ********
6: *******************
7: *************
8: *************
9: **************
10: ***********
11: *****
12: ****
是一对六面骰子的掷骰记录。一对骰子的总和可能值在 2 到 12 之间。如果你将它们掷 100 次,它们可能会给出这些结果。
此直方图显示值 6 最常滚动(19 次)而 4 最不频繁滚动(3 次)。如果您对每个 * 进行计数,您就会知道掷了多少次骰子。
您可能认为直方图必须如下所示:
但是把它转向一边:
假设蓝色条是 *
,100 - 150
标签是 2
,150 - 200
标签是 3
,然后它开始看起来像您的直方图。
这两种形式都是直方图。它们可以让您比较属于不同类别(种类)的事物的数量(多少)。
图形图表很难从基于文本的程序中输出,因此它要求您显示基本上是 ascii 艺术的内容:
如果这是一个文本文件,而不是程序输出,这也可以被认为是一种计数形式。您可以在收到新数据时轻松添加新的 *。与此相同的技巧:
希望这样更有意义。
剧透警告:如果这对您有帮助,并且您想尝试一下自己修改程序,请不要继续阅读。否则...
这个
System.out.println("\nDice roll histogram:");
System.out.println(" 1's: " + nManyStars(numOnes));
System.out.println(" 2's: " + nManyStars(numTwos));
System.out.println(" 3's: " + nManyStars(numThrees));
System.out.println(" 4's: " + nManyStars(numFours));
System.out.println(" 5's: " + nManyStars(numFives));
System.out.println(" 6's: " + nManyStars(numSixes));
System.out.println(" 7's: " + nManyStars(numSevens));
System.out.println(" 8's: " + nManyStars(numEights));
System.out.println(" 9's: " + nManyStars(numNines));
System.out.println("10's: " + nManyStars(numTens));
System.out.println("11's: " + nManyStars(numElevens));
System.out.println("12's: " + nManyStars(numTwelves));
还有这个
static String nManyStarsOld(int n) {
String result = "";
for (int i = 0; i < n; i++) {
result += "*";
}
return result;
}
如果放置在正确的位置,应该让您的程序停止打印它现在打印的内容,即:
Enter number of rolls:
20
Roll 1 is 5 (2+3)
Roll 2 is 10 (4+6)
Roll 3 is 7 (5+2)
Roll 4 is 7 (5+2)
Roll 5 is 5 (1+4)
Roll 6 is 11 (6+5)
Roll 7 is 8 (3+5)
Roll 8 is 8 (2+6)
Roll 9 is 7 (1+6)
Roll 10 is 8 (3+5)
Roll 11 is 12 (6+6)
Roll 12 is 6 (2+4)
Roll 13 is 8 (6+2)
Roll 14 is 8 (4+4)
Roll 15 is 7 (1+6)
Roll 16 is 4 (2+2)
Roll 17 is 6 (5+1)
Roll 18 is 7 (6+1)
Roll 19 is 6 (1+5)
Roll 20 is 5 (1+4)
Dice roll histogram:
1's: 0
2's: 0
3's: 0
4's: 1
5's: 3
6's: 3
7's: 5
8's: 5
9's: 0
10's: 1
11's: 1
12's: 1
相反,让它打印这个:
Dice roll histogram:
1's:
2's:
3's:
4's: *
5's: ***
6's: ***
7's: *****
8's: *****
9's:
10's: *
11's: *
12's: *
下次您 post 提问时请包括当前输出以及预期输出。
如果你觉得自己是个聪明人,实际上有一个 nManyStars() 的单行版本:
static String nManyStars(int n) {
return new String(new char[n]).replace("[=15=]", "*");
}
受此启发:
此外,如果您至少有 Java 11 个,您可以用 nManyStars(n)
换取 "*".repeat(n)
希望对您有所帮助
我已经搞定了。感谢@CandiedOrange 和@MadProgrammer 的帮助和指导!发现我的直方图代码与带有 ; 的 for 语句混淆了。在不正确的位置导致我的 for 语句无法根据其 运行 过程通过 for 语句应用 * 并且它只是将 * 作为普通打印功能打印。一切都很好。感谢大家的帮助!
我有一个 class 问题,我似乎无法理解其逻辑。
修改下面的程序来打印一个直方图,其中掷骰子的总次数等于每个可能的值,通过打印一个像*那个次数的字符来显示,如下所示。
显示每个可能值的掷骰总数的直方图。
骰子直方图:
2: ******
3: ****
4: ***
5: ********
6: *******************
7: *************
8: *************
9: **************
10: ***********
11: *****
12: ****
我不明白这个直方图到底在显示什么。这让我发疯,如果我不明白自己在做什么,我就无法按照自己的逻辑前进。我知道之前有人问过这个问题,但看起来他们都有特定数量的骰子角色。我没有得到一个数字,这就是让我失望的原因。我知道这真是一个愚蠢的问题。但是任何人都可以向我解释 "Histogram showing total number of dice rolls for each possible value" 是什么意思,这个可能的值是什么?我完全不知所措......感谢任何帮助。这是我到目前为止编写的代码。
import java.util.Scanner;
import java.util.Random;
public class DiceStats {
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
Random randGen = new Random();
int i = 0; // Loop counter iterates numRolls times
int numRolls = 0; // User defined number of rolls
int numOnes = 0; // Tracks number of 1's found
int numTwos = 0; // Tracks number of 2's found
int numThrees = 0; // Tracks number of 3's found
int numFours = 0; // Tracks number of 4's found
int numFives = 0; // Tracks number of 5's found
int numSixes = 0; // Tracks number of 6's found
int numSevens = 0; // Tracks number of 7's found
int numEights = 0; // Tracks number of 8's found
int numNines = 0; // Tracks number of 9's found
int numTens = 0; // Tracks number of 10's found
int numElevens = 0; // Tracks number of 11's found
int numTwelves = 0; // Tracks number of 12's found
int die1 = 0; // Dice values
int die2 = 0; // Dice values
int rollTotal = 0; // Sum of dice values
System.out.println("Enter number of rolls: ");
numRolls = scnr.nextInt();
if (numRolls >= 1) {
// Roll dice numRoll times
for (i = 0; i < numRolls; ++i) {
die1 = randGen.nextInt(6) + 1;
die2 = randGen.nextInt(6) + 1;
rollTotal = die1 + die2;
// Count number of sixes and sevens
if (rollTotal == 1) {
numOnes = numOnes + 1;
}
if (rollTotal == 2) {
numTwos = numTwos + 1;
}
if (rollTotal == 3) {
numThrees = numThrees + 1;
}
if (rollTotal == 4) {
numFours = numFours + 1;
}
if (rollTotal == 5) {
numFives = numFives + 1;
}
if (rollTotal == 6) {
numSixes = numSixes + 1;
}
if (rollTotal == 7) {
numSevens = numSevens + 1;
}
if (rollTotal == 8) {
numEights = numEights + 1;
}
if (rollTotal == 9) {
numNines = numNines + 1;
}
if (rollTotal == 10) {
numTens = numTens + 1;
}
if (rollTotal == 11) {
numElevens = numElevens + 1;
}
else if (rollTotal == 12) {
numTwelves = numTwelves + 1;
}
System.out.println("Roll " + (i+1) + " is " + rollTotal + " (" + die1 +
"+" + die2 + ")");
}
// Prints a histogram of the number of dice rolls
System.out.println("\nDice roll histogram:");
System.out.println("1's: " + numOnes);
System.out.println("2's: " + numTwos);
System.out.println("3's: " + numThrees);
System.out.println("4's: " + numFours);
System.out.println("5's: " + numFives);
System.out.println("6's: " + numSixes);
System.out.println("7's: " + numSevens);
System.out.println("8's: " + numEights);
System.out.println("9's: " + numNines);
System.out.println("10's: " + numTens);
System.out.println("11's: " + numElevens);
System.out.println("12's: " + numTwelves);
}
else {
System.out.println("Invalid rolls. Try again.");
}
return;
}
}
您可以看到我输入直方图条目的位置。我基本上认为我需要编辑我从 "numOnes" 等整数给出的值到星号,但现在我不确定......任何帮助表示赞赏!
已编辑代码 -
System.out.println("\nDice roll histogram:");
System.out.print("2's: ");
for(i = 0; i < numTwos; i++){
System.out.print("*");
}
System.out.println("");
System.out.print("3's: ");
for (i = 0; i < numThrees; i++);{
System.out.print("*");
}
System.out.println("");
System.out.print("4's: " );
for (i = 0; i < numFours; i++);{
System.out.print("*");
}
System.out.println("");
System.out.print("5's: ");
for (i = 0; i < numFives; i++);{
System.out.print("*");
}
System.out.println("");
System.out.print("6's: ");
for (i = 0; i < numSixes; i++);{
System.out.print("*");
}
System.out.println("");
System.out.print("7's: ");
for (i = 0; i < numSevens; i++);{
System.out.print("*");
}
System.out.println("");
System.out.print("8's: ");
for (i = 0; i < numEights; i++);{
System.out.print("*");
}
System.out.println("");
System.out.print("9's: ");
for (i = 0; i < numNines; i++);{
System.out.print("*");
}
System.out.println("");
System.out.print("10's: ");
for (i = 0; i < numTens; i++);{
System.out.print("*");
}
System.out.println("");
System.out.print("11's: ");
for (i = 0; i < numElevens; i++);{
System.out.print("*");
}
System.out.println("");
System.out.print("12's: ");
for (i = 0; i < numTwelves; i++);{
System.out.print("*");
}
System.out.println("");
}
输出 -
Enter number of rolls:
5
Roll 1 is 8 (2+6)
Roll 2 is 9 (6+3)
Roll 3 is 9 (5+4)
Roll 4 is 6 (4+2)
Roll 5 is 9 (6+3)
Dice roll histogram:
2's:
3's: *
4's: *
5's: *
6's: *
7's: *
8's: *
9's: *
10's: *
11's: *
12's: *
我可以输入更多的卷,我会得到一个星号表示 2,它会根据我的需要增加,但它不会增加其余的数字,它们都只会得到一个星号。是什么阻止我的代码正确增加 * 的数量?我已经为此奋斗了几个小时:/
"I do not understand what in the world this histogram is displaying."
嗯,正如你所说:
"Histogram showing total number of dice rolls for each possible value"
直方图:
2: ******
3: ****
4: ***
5: ********
6: *******************
7: *************
8: *************
9: **************
10: ***********
11: *****
12: ****
是一对六面骰子的掷骰记录。一对骰子的总和可能值在 2 到 12 之间。如果你将它们掷 100 次,它们可能会给出这些结果。
此直方图显示值 6 最常滚动(19 次)而 4 最不频繁滚动(3 次)。如果您对每个 * 进行计数,您就会知道掷了多少次骰子。
您可能认为直方图必须如下所示:
但是把它转向一边:
假设蓝色条是 *
,100 - 150
标签是 2
,150 - 200
标签是 3
,然后它开始看起来像您的直方图。
这两种形式都是直方图。它们可以让您比较属于不同类别(种类)的事物的数量(多少)。
图形图表很难从基于文本的程序中输出,因此它要求您显示基本上是 ascii 艺术的内容:
如果这是一个文本文件,而不是程序输出,这也可以被认为是一种计数形式。您可以在收到新数据时轻松添加新的 *。与此相同的技巧:
希望这样更有意义。
剧透警告:如果这对您有帮助,并且您想尝试一下自己修改程序,请不要继续阅读。否则...
这个
System.out.println("\nDice roll histogram:");
System.out.println(" 1's: " + nManyStars(numOnes));
System.out.println(" 2's: " + nManyStars(numTwos));
System.out.println(" 3's: " + nManyStars(numThrees));
System.out.println(" 4's: " + nManyStars(numFours));
System.out.println(" 5's: " + nManyStars(numFives));
System.out.println(" 6's: " + nManyStars(numSixes));
System.out.println(" 7's: " + nManyStars(numSevens));
System.out.println(" 8's: " + nManyStars(numEights));
System.out.println(" 9's: " + nManyStars(numNines));
System.out.println("10's: " + nManyStars(numTens));
System.out.println("11's: " + nManyStars(numElevens));
System.out.println("12's: " + nManyStars(numTwelves));
还有这个
static String nManyStarsOld(int n) {
String result = "";
for (int i = 0; i < n; i++) {
result += "*";
}
return result;
}
如果放置在正确的位置,应该让您的程序停止打印它现在打印的内容,即:
Enter number of rolls:
20
Roll 1 is 5 (2+3)
Roll 2 is 10 (4+6)
Roll 3 is 7 (5+2)
Roll 4 is 7 (5+2)
Roll 5 is 5 (1+4)
Roll 6 is 11 (6+5)
Roll 7 is 8 (3+5)
Roll 8 is 8 (2+6)
Roll 9 is 7 (1+6)
Roll 10 is 8 (3+5)
Roll 11 is 12 (6+6)
Roll 12 is 6 (2+4)
Roll 13 is 8 (6+2)
Roll 14 is 8 (4+4)
Roll 15 is 7 (1+6)
Roll 16 is 4 (2+2)
Roll 17 is 6 (5+1)
Roll 18 is 7 (6+1)
Roll 19 is 6 (1+5)
Roll 20 is 5 (1+4)
Dice roll histogram:
1's: 0
2's: 0
3's: 0
4's: 1
5's: 3
6's: 3
7's: 5
8's: 5
9's: 0
10's: 1
11's: 1
12's: 1
相反,让它打印这个:
Dice roll histogram:
1's:
2's:
3's:
4's: *
5's: ***
6's: ***
7's: *****
8's: *****
9's:
10's: *
11's: *
12's: *
下次您 post 提问时请包括当前输出以及预期输出。
如果你觉得自己是个聪明人,实际上有一个 nManyStars() 的单行版本:
static String nManyStars(int n) {
return new String(new char[n]).replace("[=15=]", "*");
}
受此启发:
此外,如果您至少有 Java 11 个,您可以用 nManyStars(n)
换取 "*".repeat(n)
希望对您有所帮助
我已经搞定了。感谢@CandiedOrange 和@MadProgrammer 的帮助和指导!发现我的直方图代码与带有 ; 的 for 语句混淆了。在不正确的位置导致我的 for 语句无法根据其 运行 过程通过 for 语句应用 * 并且它只是将 * 作为普通打印功能打印。一切都很好。感谢大家的帮助!