2014-09-23 3 views
0

주사위 시뮬레이터를 만들고 있는데, 한 번에 4 개의 주사위를 굴리고 주사위의 각면을 합친 다음 원하는만큼 반복합니다. 그런 다음 각 롤 (4 개의 주사위가 더해진 횟수)을 기록하고 테이블을 만들어야합니다.Java의 주사위 프로그래밍

내가 근본적으로 고민하고있는 것은 코드를 반복하여 원하는만큼 여러 번 반복하여 각 롤의 숫자 값을 추적하는 것입니다.

이 다이 내 프로그램입니다 : 여기 내 코드는 지금까지입니다

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); 
    } 
} 

그리고 이것은 내 다이 시뮬레이터 프로그램입니다 : 다이 시뮬레이터 프로그램의 주석 부분은

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(); 
    } 
} 

했다 그냥 롤의 숫자 값을 게시하는 방법을 알아 내려고 노력했습니다. 압연 값

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; 
    } 
} 

를 추적하려면이지도 나 배열을 사용하여 가능하다 :

도움이

+1

프로그램의 종료 조건은 무엇인가 : 각 통해

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

당신은 반복에 의해 쉽게 던져? 언제 중단해야합니까? 당신은 또한 지금 각 롤을 추적하고 있지 않습니다. – mkobit

+0

롤의 수치 값을 게시하는 방법을 알아 내려고 노력하면서 무슨 뜻인지 천명하실 수 있습니까? –

+5

이것도 컴파일됩니까? : for (int i = 1; i <= TRIES; TRIES +) –

답변

0

당신은 네 개의 주사위를 다루는 새로운 클래스를 만들 수 있습니다 감사하겠습니다

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"); 
     } 
    } 
} 
0

정말 프로그램의 구조가 마음에 들지만, 다른 클래스를 신경 쓸 필요가 없다면 훨씬 간단하다고 생각합니다.

각각의 롤을 추적하는 가장 쉬운 방법은 다음과 같습니다

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; 

}