Rolling

From CompSciWiki
Revision as of 11:05, 4 April 2011 by CameronH (Talk | contribs)

Jump to: navigation, search

Back to the Case Studies homepage

Problem

Write a program that uses an array to store the results of a simulation with two n-sided dice. At each step in the simulation, “roll” the pair of the dice and use the array to keep track of the number times each of the possible sums has been rolled so far. To store the results of the simulation, you will need an array of length 2n - 1, where n is the number of sides to each die. The following is an example of what an array for two 6-sided dice could look like after a 24-step simulation.

 ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___
|   |   |   |   |   |   |   |   |   |   |   | 
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| <-- index
|___|___|___|___|___|___|___|___|___|___|___|
|   |   |   |   |   |   |   |   |   |   |   |
| 1 | 3 | 0 | 2 | 3 | 5 | 3 | 4 | 2 | 1 | 0 | <-- value
|___|___|___|___|___|___|___|___|___|___|___|

Element 0 in our array represents a sum of 2, element 1 represents a sum of 3 and so on. The above array indicates that during the simulation, a sum of 2 (element 0) was rolled once, while a sum of 7 (element 5) was rolled 5 times.
Your program should ask the user for two values:

  • The number of sides to the dice. Both dice will have the same number of sides.
  • The number of steps in the simulation.

After reading in the input using Scanner, simulate rolling the die by generating two random numbers between 1 and the number of sides (inclusive). After the simulation is complete, print out a histogram displaying the percentage of simulation steps that generated each possible sum.


The following is an example histogram for the simulation illustrated above, with percentages rounded to nearest integer:

Sum of 2: ==== (4%)
Sum of 3: ============= (13%)
Sum of 4: (0%)
Sum of 5: ======== (8%)
Sum of 6: ============= (13%)
Sum of 7: ===================== (21%)
Sum of 8: ============= (13%)
Sum of 9: ================= (17%)
Sum of 10: ======== (8%)
Sum of 11: ==== (4%)
Sum of 12: (0%)

In addition to re-using the printBar method from Nucleotides, your program should consist of the following four methods:

public static void initializeArray(int initValue, int[] array)

The method initializeArray should set all values in the array to initValue.

public static int generateRandomNumber(int maximum)

The method generateRandomNumber should use Math.random to generate a random number between 1 and maximum (inclusive). For example, generateRandomNumber(4) should return one of 1, 2, 3, or 4.

public static void performSimulation(int numSides, int[] counts, int numSteps)

The method performSimulation should call initializeArray to set all values of the counts array to 0 and then execute the simulation. Executing the simulation should consist of repeated calling generateRandomNumber twice (to simulate rolling both dice) and COMP 1010 Fall 2010 Assignment 4 Page 3 of 6 incrementing the appropriate value in the counts array. numSides is the number of sides to the dice.

public static void printRollHistogram(int numSides, int[] counts, int numSteps)

The printRollHistogram method should print a header line listing the parameters of the simulation (number of sides to the dice and the number of simulation steps) and then print the entire histogram for the given simulation.

public static void main(String[] args)

Your main method should ask the user for the number of sides to the dice, and then do the following in a loop:

  • Ask the user for the number of steps in the simulation
  • Perform the simulation
  • Print the roll histogram

Here is a sample run of the program

Enter the number of sides to the dice
8
Enter the number of simulation steps
50
Results of a 50-step simulation with two 8-sided dice:
Sum of 2: == (2%)
Sum of 3: (0%)
Sum of 4: == (2%)
Sum of 5: ====== (6%)
Sum of 6: ================ (16%)
Sum of 7: ======== (8%)
Sum of 8: ==== (4%)
Sum of 9: ==================== (20%)
Sum of 10: ======== (8%)
Sum of 11: ======== (8%)
Sum of 12: ======== (8%)
Sum of 13: ========== (10%)
Sum of 14: == (2%)
Sum of 15: ==== (4%)
Sum of 16: == (2%)
Enter the number of simulation steps
600
Results of a 600-step simulation with two 8-sided dice:
Sum of 2: == (2%)
Sum of 3: ==== (4%)
Sum of 4: ======= (7%)
Sum of 5: ======= (7%)
Sum of 6: ====== (6%)
Sum of 7: ========== (10%)
Sum of 8: ============ (12%)
Sum of 9: ============= (13%)
Sum of 10: ========== (10%)
Sum of 11: ========== (10%)
Sum of 12: ======== (8%)
Sum of 13: ===== (5%)
Sum of 14: === (3%)
Sum of 15: === (3%)
Sum of 16: == (2%)
Enter the number of simulation steps
-1
Programmed by [your name here].
End of Processing.
 

SideSectionTitle

SideSection goes here.

Solution

To create a solution for this problem we must first start out by separating sections. These sections in java are called "methods". By separating our program into separate parts we can then worry about each section individually. The methods that we are going to want to separate our program into are going to be as followed:

Initialize Array Method

public static void initializeArray(int initValue, int[] array)

This method will be used to initialize the array. To do this you will use a for loop that counts from 0 to the size of the array.

Generate Random Number Method

public static int generateRandomNumber(int maximum)

Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph

Perform Simulation Method

public static void performSimulation(int numSides, int[] counts, int numSteps)

Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph

Print Roll Histogram Method

public static void printRollHistogram(int numSides, int[] counts, int numSteps)

Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph

Main

Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph

Declare Variables

Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph

Retrieving Number of Sides

Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph

Initializing Array

Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph

Retrieving the Number of Steps

Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph

Rolling

Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph Paragraph

Code

Solution Code

Back to the Case Studies homepage


|SideSectionTitle=Rolling |SideSection=insert side section here