diff --git a/java/src/main/java/Bins.java b/java/src/main/java/Bins.java index b9da83e..a8ab55d 100644 --- a/java/src/main/java/Bins.java +++ b/java/src/main/java/Bins.java @@ -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; + } } diff --git a/java/src/main/java/Dice.java b/java/src/main/java/Dice.java index 2283c96..232fe5d 100644 --- a/java/src/main/java/Dice.java +++ b/java/src/main/java/Dice.java @@ -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; + } } + diff --git a/java/src/main/java/Simulation.java b/java/src/main/java/Simulation.java index 73d86e8..40f9ffc 100644 --- a/java/src/main/java/Simulation.java +++ b/java/src/main/java/Simulation.java @@ -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(); + } +} \ No newline at end of file diff --git a/java/target/classes/Bins.class b/java/target/classes/Bins.class new file mode 100644 index 0000000..4955d00 Binary files /dev/null and b/java/target/classes/Bins.class differ diff --git a/java/target/classes/Dice.class b/java/target/classes/Dice.class new file mode 100644 index 0000000..3672758 Binary files /dev/null and b/java/target/classes/Dice.class differ diff --git a/java/target/classes/Simulation.class b/java/target/classes/Simulation.class new file mode 100644 index 0000000..8acadbc Binary files /dev/null and b/java/target/classes/Simulation.class differ diff --git a/java/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/java/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/java/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/java/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..da59389 --- /dev/null +++ b/java/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -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