Java中的骰子程序

时间:2014-09-23 06:02:45

标签: java loops random dice

我正在制作一个骰子模拟器,我的任务是一次掷4个骰子,加上骰子的每个面,然后根据我的需要重复这个过程。然后我必须记录每次掷骰(加上4个骰子)的次数,并制作一张桌子。

我基本上正在努力的是如何循环我的代码,以便它可以根据需要重复滚动,跟踪每个滚动的数值。到目前为止,这是我的代码:

这是我的Die程序:

import java.util.Random;

public class Die
{
   private Random generator;
   private int sides;
   public Die (int s)
   {
      sides = s;
      generator = new Random();
   }

   public int cast()
   {
      return 1 + generator.nextInt(sides);
   }
}

这是我的Die Simulator计划:

import java.util.Scanner;
import java.util.Random;

public class DieSimulator
{
   public static void main(String[] args)
   {
      Die d1 = new Die(6);
      Die d2 = new Die(6);
      Die d3 = new Die(6);
      Die d4 = new Die(6);
      final int TRIES = 1;
      for (int i = 1; i <= TRIES; TRIES +)
      {
         int n1 = d1.cast();
         //System.out.print(n1 + "");
         int n2 = d2.cast();
         //System.out.print(n2 + "");
         int n3 = d3.cast();
         //System.out.print(n3 + "");
         int n4 = d4.cast();
         System.out.print(n4 + n3 + n2 + n1);
         n = n4 + n3 + n2 + n1

      }
      System.out.println();
   }
}

Die模拟器程序的注释部分只是我试图弄清楚如何发布滚动的数值。

任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

你可以创建一个处理四个骰子的新类:

public class Dice {
    private Die[] dice;
    public Dice(int noOfDice, int maxValueOfDice) {
        dice = new Die[noOfDice];
        for( int i = 0; i < dice.length; ++i){
            dice[i] = new Die(maxValueOfDice);
        }
    }
    public int cast(){
        int sum = 0;
        for( Die d : dice){
            sum += d.cast();
        }
        return sum;
    }
}

使用地图或数组可以跟踪滚动的值:

import java.util.HashMap;
import java.util.Map;

public class Statistics {
    static int TRIES = 1000;
    public static void main(String[] args)
    {
        Dice dice = new Dice(4, 6);
        Map<Integer,Integer> map = new HashMap<>();
        // roll TRIES times
        for (int i = 1; i <= TRIES; ++i){
            int value = dice.cast();
            if( map.containsKey(value)){
                map.put(value, map.get(value)+1);
            } else {
                map.put(value,1);
            }
        }
        // print all results:
        for( Integer key : map.keySet()){
            System.out.println("Value " + key + " rolled " + map.get(key) + " times");
        }
    }
}

答案 1 :(得分:0)

我非常喜欢你的程序的结构,但我认为如果你没有打扰另一个班级会很简单。

跟踪每个单独滚动的最简单方法是:

**int [][] results = new int[nDices][nRolls];**

您可以通过以下方式轻松迭代每次投掷:

Random r = new Random();
int currSum=0;
int oneRollSum=0;
for(int i=0; i<nRolls;i++){
    for(int j=0; j<nDices; j++){
       results[j][i]= r.nextInt(6)+1;
       oneRollSum=oneRollSum+results[j][i];
       currSum=results[j][i]+currSum;
    }
    oneRollSum=0;

}