java - 掷骰子类和驱动程序

标签 java

好吧,所以我必须编写一个类和驱动程序,让用户输入骰子的数量和掷骰的数量。然后我必须根据骰子的数量 * 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/

相关文章:

java - 如何将php客户端连接到java webservice?

java - Jackson XML 解码和抽象类

java - 使用 java 将 xml 中的 Null 值表示为空白

java多态和继承问题

java - 我们可以在hibernate中的选择或更新查询中使用表名而不是java类名吗?

java - 我的 Android 库中的包结构更好

java - 如何在java中映射void *

java - Android Webview 在 ICS 4.0 + 上无法正确呈现

java - Java 源代码有什么问题?

java - 使用 PHP 解压缩使用 Java Android 压缩和上传的文件