Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions java/src/main/java/Bins.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,34 @@

public class Bins {
private int[] bins;
private int min; // minimum sum
private int max; // maximum sum

public Bins(int min, int max) {
this.min = min;
this.max = max;
this.bins = new int[max - min + 1]; // array index = sum - min
}

public void incrementBin(int sum) {
if (sum < min || sum > max) {
throw new IllegalArgumentException("Sum out of range");
}
bins[sum - min]++;
}

public int getBin(int sum) {
if (sum < min || sum > max) {
throw new IllegalArgumentException("Sum out of range");
}
return bins[sum - min];
}

public int getTotalRolls() {
int total = 0;
for (int count : bins) {
total += count;
}
return total;
}
}
18 changes: 18 additions & 0 deletions java/src/main/java/Dice.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,22 @@
import java.util.Random;

public class Dice {
private int numberOfDice;
private int sides;
private Random random;

public Dice(int numberOfDice, int sides) {
this.numberOfDice = numberOfDice;
this.sides = sides;
this.random = new Random();
}

public int roll() {
int total = 0;
for (int i = 0; i < numberOfDice; i++) {
total += random.nextInt(sides) + 1; // 1 to sides
}
return total;
}
}

54 changes: 54 additions & 0 deletions java/src/main/java/Simulation.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,59 @@
public class Simulation {
private Dice dice;
private Bins results;
private int numberOfTosses;

public Simulation(int numberOfDice, int numberOfTosses) {
this.dice = new Dice(numberOfDice, 6);
this.results = new Bins(numberOfDice, numberOfDice * 6);
this.numberOfTosses = numberOfTosses;
}

public void runSimulation() {
for (int i = 0; i < numberOfTosses; i++) {
int roll = dice.roll();
results.incrementBin(roll);
}
}

public void printResults() {
int total = results.getTotalRolls();

System.out.println("***");
System.out.println("Simulation of 2 dice tossed for " + total + " times.");
System.out.println("***\n");

// Find max count for scaling
int maxCount = 0;
for (int sum = 2; sum <= 12; sum++) {
int count = results.getBin(sum);
if (count > maxCount) {
maxCount = count;
}
}

int maxStars = 50; // width of histogram

for (int sum = 2; sum <= 12; sum++) {
int count = results.getBin(sum);
double percentage = (double) count / total;

// Scale stars relative to max
int starCount = (int) (((double) count / maxCount) * maxStars);

StringBuilder stars = new StringBuilder();
for (int i = 0; i < starCount; i++) {
stars.append("*");
}

System.out.printf("%2d : %8d: %.2f %s%n",
sum, count, percentage, stars.toString());
}
}

public static void main(String[] args) {
Simulation sim = new Simulation(2, 1000000);
sim.runSimulation();
sim.printResults();
}
}
Binary file added java/target/classes/Bins.class
Binary file not shown.
Binary file added java/target/classes/Dice.class
Binary file not shown.
Binary file added java/target/classes/Simulation.class
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/Users/anitra/Projects/DiceyLab/java/src/main/java/Dice.java
/Users/anitra/Projects/DiceyLab/java/src/main/java/Simulation.java
/Users/anitra/Projects/DiceyLab/java/src/main/java/Bins.java