我正在制作一个骰子模拟器,我的任务是一次掷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模拟器程序的注释部分只是我试图弄清楚如何发布滚动的数值。
任何帮助将不胜感激
答案 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;
}