SHARE
SPREAD
HELP

The Tradition of Sharing

Help your friends and juniors by posting answers to the questions that you know. Also post questions that are not available.


To start with, Sr2Jr’s first step is to reduce the expenses related to education. To achieve this goal Sr2Jr organized the textbook’s question and answers. Sr2Jr is community based and need your support to fill the question and answers. The question and answers posted will be available free of cost to all.

 

#
Authors:
Walter Savitch ,kenrick Mock
Chapter:
Polymorphism And Abstract Classes
Exercise:
Programming Projects
Question:9 | ISBN:9780132830317 | Edition: 5

Question

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.


TextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbookTextbook

Answer

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
...

 

0 0

Discussions

Post the discussion to improve the above solution.