滚动骰子类和驱动程序

时间:2011-03-31 09:32:19

标签: java

好吧所以我必须编写一个类和驱动程序,用户输入骰子数和滚动数。然后我必须根据骰子的数量制作一个数组* 6.但我得到错误。像arrayindexoutofboundsexception。

在我制作数组后,我必须用随机数填充它并使用直方图来显示程序。所以程序看起来应该是这样的 请在这里给予任何积极的帮助,我是这个编程的新手,我很想了解更多。我似乎无法弄清楚Y / N区域的陈述是否可以启动该程序

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++)
        {

        }

    }

}

2 个答案:

答案 0 :(得分:2)

从程序要求的问题的措辞和你给出的样本直方图来看,似乎编写了一个程序来模拟滚动 N 骰子 M 次然后对卷进行结果直方图(即每卷上骰子上数字的总和)。因此,如果你输入3个骰子和100个骰子,就应该好像用手碾压3个骰子100次。

除了ArrayIndexOutOfBoundsException问题之外,代码正在做什么。由于这是录取作业,我不打算给出任何代码,至少在这一点上是这样。但我确实有一些建议/问题可能会帮助您更好地思考问题,也许您可​​以在考虑之后向我们展示您是如何更改代码的。

首先,考虑实际手动完成任务。找到两个或三个骰子,然后滚动它们,比如20次,然后在纸上画出结果的直方图。您可能会发现,单独这样做可以让您深入了解您的计划必须做什么并跟踪。

接下来,以下是一些可能有助于集中思考的问题:

  • 如果你正在掷2个骰子,那么滚动的最低结果是什么?什么是最高的?
  • 如果你正在掷3个骰子,那么滚动的最高和最低结果是什么?
  • 如果您正在滚动 N 骰子,那么滚动的最高和最低结果是什么?
  • 模拟卷筒时,如何确定卷筒的结果?
  • 您应该在哪个阵列中跟踪这些结果以及它应该有多大?
  • 如何以可以在以后制作直方图的方式跟踪结果?
  • 除了结果之外,您还需要存储什么?

全部考虑一下,手动执行“实验”,然后回复我们您对程序所做的更改以及您可能遇到的新问题。

答案 1 :(得分:0)

你宣称diceAr是大小'骰子',但随后用一个变量上传到'simDice',即=骰子* 6。