The following is a short snippet of code that simulates rolling a 6-sided dice 100 times. There is an equal chance of rolling any digit from 1 to 6.
public static void printDiceRolls(Random randGenerator)
{
for ( int i = 0; i < 100; i++)
{
System.out.println(randGenerator.nextInt(6) + 1);
}
}
public static void main(String[] args)
{
Random randGenerator = new Random();
printDiceRolls(randGenerator);
}
Create your own class, LoadedDice, that is derived from Random . The constructor for LoadedDice needs to only invoke Random ’s constructor. Override the public int nextInt(int num) method so that with a 50% chance, your new method always returns the largest number possible (i.e., num – 1), and with a 50% chance, it returns what Random’s nextInt method would return.
Test your class by replacing the main method with the following:
LoadedDice myDice = new LoadedDice();
printDiceRolls(myDice); You do not need to change the printDiceRolls method even though it takes a parameter of type Random . Polymorphism tells Java to invoke LoadedDice ’s nextInt() method instead of Random ’s nextInt() method.
PROGRAM CODE:
import java.util.Random;
class LoadedDice extends Random {
public LoadedDice() {
super();
}
@Override
public int nextInt(int num) {
if (super.nextBoolean()) {
// 50% chance of returning the largest number
return num - 1;
} else {
// 50% chance of returning a random number
return super.nextInt(num);
}
}
}
public class DiceRollTest {
public static void printDiceRolls(Random randGenerator) {
for (int i = 0; i < 100; i++) {
System.out.println(randGenerator.nextInt(6) + 1);
}
}
public static void main(String[] args) {
LoadedDice myDice = new LoadedDice();
printDiceRolls(myDice);
}
}
OUTPUT OF THE PROGRAM CODE:
6
5
5
4
5
1
1
5
6
...