好吧,所以我必须编写一个类和驱动程序,让用户输入骰子的数量和掷骰的数量。然后我必须根据骰子的数量 * 6 创建一个数组。但我收到错误。像数组索引越界异常。
创建数组后,我必须用随机数填充它并使用直方图来显示程序。所以程序应该是这样的 请在这里给予任何积极的帮助,我是这个编程的新手,我很想了解更多。我似乎也无法弄清楚 Y/N 区域的 if 语句来启动程序
Welcome to the dice-rolling simulator!
Do you wish to run a simulaton? Y/N: x
that was an invalid option. Please try again.
Do you wish to run a simulation? Y/N: y
How many dise di you wish to roll? 2
How many rolls to you wish to make? 100000
2:@@@@@@
3:@@@@
4:@@@@@@@@@@@
5:@@@@@
6:@@
7:@
8:
9:@@@@@@@@@@
10:@@@
11:@@@@@@@@@@@@@@
12:@@@@@@
//我必须给你@符号,因为*在这里不起作用
这是我的程序更新!如何创建直方图?
package dice;
import java.util.Scanner;
import java.util.Random;
public class Dice
{
public static Scanner in = new Scanner (System.in);
private int dice = 0;
private int roll = 0;
private int start;
private int[] diceAr;
private int[] rollAr;
private int simDice;
private String star = "*";
//****************************************************************
public Dice()
{
System.out.println("Welcome to the dice-rolling simulator!\n");
System.out.println("Do you wish to run a simulation? Y/N; ");
//start = in.nextInt();
while (true) {
System.out.print ("How Many Dice Do You Want To Roll? ");
dice = in.nextInt();
simDice = (dice * 6)-1;
diceAr = new int[simDice];
if (dice > 0)
break;
}
while (true) {
System.out.print ("How Many Times Do You Want To Roll? ");
roll = in.nextInt();
rollAr = new int[roll];
if (roll > 0)
break;
}
}
//**********************************************
// public void display()
// {
//
for ( int i = 0; i < simDice; i++)
// {
// diceAr[i] = (int)(Math.random()* simDice);
//
// }
// for(int i = 0; i<simDice; i++)
// {
// System.out.println((i + dice) + ". " + diceAr[i]);
// }
//
// }
//*********************************************************
public void display(int diceAr[], int simDice, int roll)
{
for(int i=0; i < simDice; i++)
{
diceAr[i] = (int) (Math.random()* simDice);
}
for(int i=0; i < roll; i++)
{
}
}
}
最佳答案
从程序提出的问题的措辞和您提供的示例直方图来看,任务似乎是编写一个程序来模拟滚动N个骰子M次然后制作掷骰结果的直方图(即每次掷骰子上的数字之和)。因此,如果您输入 3 个骰子并掷 100 次,则应该相当于您用手掷 3 个骰子 100 次。
即使除了 ArrayIndexOutOfBoundsException 问题,这也不是您的代码正在做的事情。由于这是公认的家庭作业,我不会提供任何代码,至少目前不会。但我确实有一些建议/问题可以帮助您更好地思考问题,也许您可以向我们展示您在考虑后如何更改代码。
首先,考虑手动执行该任务。找到两到三个骰子,掷骰子(例如,掷 20 次),然后在纸上绘制结果的直方图。您可能会发现,仅仅这样做本身就能让您深入了解您的程序必须做什么并跟踪。
接下来,以下是一些可能有助于您集中思考的问题:
- 如果您掷 2 个骰子,掷出的最低结果是多少?最高是多少?
- 如果您掷 3 个骰子,掷出的最高和最低结果分别是多少?
- 如果您掷 N 个骰子,掷出的最高和最低结果分别是多少?
- 当您模拟掷骰时,如何确定掷骰的结果是什么?
- 您应该在哪个数组中跟踪这些结果以及它应该有多大?
- 如何跟踪结果以便稍后制作直方图?
- 除了结果之外,您还需要存储什么(如果有的话)?
仔细考虑一下,手动进行“实验”,然后告诉我们您对程序进行了哪些更改以及您可能有哪些新问题。
关于java - 掷骰子类和驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5497787/