-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDie.java
More file actions
131 lines (109 loc) · 4.13 KB
/
Die.java
File metadata and controls
131 lines (109 loc) · 4.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import java.util.ArrayList;
import java.util.Arrays;
public class Die {
// Represents probability of rolling a certain number
// [1, 2, 3, 4, 5, 6] is a standard 6 sided die
// [1, 1, 2, 3, 4, 5, 6] is a 6 sided die that is twice as likely to roll 1
ArrayList<Integer> dieWeights = new ArrayList<Integer>();
// Stores last number rolled, -1 by default
int lastRoll = -1;
// Constructs standard 6 sided die
public Die() {
for (int i = 0; i < 6; i++) {
dieWeights.add(i + 1);
}
}
// Constructs standard n sided die
public Die(int sides) {
for (int i = 0; i < sides; i++) {
dieWeights.add(i + 1);
}
}
// Constructs weighted n sided die
public Die(Integer... nums) {
for (int num : nums) {
dieWeights.add(num);
}
}
// Returns number of sides
public int getSides() {
int numSides = 0;
for (int dieWeight : dieWeights) {
if (dieWeight > numSides) {
numSides = dieWeight;
}
}
return numSides;
}
// Returns roll
public int getRoll() {
lastRoll = dieWeights.get((int) (Math.random() * dieWeights.size()));
return lastRoll;
}
// Returns n rolls
public String getRoll(int numRolls) {
int[] tempList = new int[numRolls];
for (int i = 0; i < numRolls; i++) {
lastRoll = dieWeights.get((int) (Math.random() * dieWeights.size()));
tempList[i] = lastRoll;
}
return Arrays.toString(tempList);
}
// Returns last number rolled
public int getLastRoll() {
return lastRoll;
}
// Returns frequency of each value in n rolls
public String getFrequency(int numRolls) {
int[] frequencyList = new int[getSides()];
for (int i = 0; i < numRolls; i++) {
lastRoll = getRoll();
frequencyList[lastRoll - 1]++;
}
return Arrays.toString(frequencyList);
}
// Returns sum of n rolls
public int getSum(int numRolls) {
int sum = 0;
for (int i = 0; i < numRolls; i++) {
lastRoll = getRoll();
sum += lastRoll;
}
return sum;
}
// Returns average of n rolls
public double getAverage(int numRolls) {
int sum = 0;
for (int i = 0; i < numRolls; i++) {
lastRoll = getRoll();
sum += lastRoll;
}
return (double) sum / numRolls;
}
public static void main(String[] args) {
Die six = new Die();
Die four = new Die(4);
Die sevenWeight = new Die(1, 1, 2, 3, 4, 4, 4, 5, 6, 7);
System.out.println("Sides: " + six.getSides());
System.out.println("Sides: " + four.getSides());
System.out.println("Sides: " + sevenWeight.getSides());
System.out.println("Roll: " + six.getRoll());
System.out.println("Roll: " + four.getRoll());
System.out.println("Roll: " + sevenWeight.getRoll());
System.out.println("20 rolls: " + six.getRoll(20));
System.out.println("20 rolls: " + four.getRoll(20));
System.out.println("20 rolls: " + sevenWeight.getRoll(20));
System.out.println("Last roll: " + six.getLastRoll());
System.out.println("Last roll: " + four.getLastRoll());
System.out.println("Last roll: " + sevenWeight.getLastRoll());
System.out.println("Frequency in 100000 rolls: " + six.getFrequency(100000));
System.out.println("Frequency in 100000 rolls: " + four.getFrequency(100000));
System.out.println("Frequency in 100000 rolls: " + sevenWeight.getFrequency(100000));
System.out.println("Sum of 100000 rolls: " + six.getSum(100000));
System.out.println("Sum of 100000 rolls: " + four.getSum(100000));
System.out.println("Sum of 100000 rolls: " + sevenWeight.getSum(100000));
System.out.println("Average of 100000 rolls: " + six.getAverage(100000));
System.out.println("Average of 100000 rolls: " + four.getAverage(100000));
System.out.println("Average of 100000 rolls: " + sevenWeight.getAverage(100000));
}
}