Solution for
Programming Exercise 4.3
THIS PAGE DISCUSSES ONE POSSIBLE SOLUTION to
the following exercise from this on-line
Java textbook.
Exercise 4.3:
Write a function that simulates rolling a pair of dice until the total on
the dice comes up to be a given number. The number that you are rolling for
is a parameter to the function. The number of times you have to roll the
dice is the return value of the function. You can assume that the parameter
is one of the possible totals: 2, 3, ..., 12. Use your function in
a program that computes and prints the
number of rolls it takes to get snake eyes. (Snake eyes
means that the total showing on the dice is 2.)
Discussion
The subroutine we have to write is very similar to the
program from Exercise 3.1.
The main difference is that instead of rolling until both dice come up 1,
we roll until the total showing on the dice is equal to some specified
value. That value is given by the parameter to the function.
I named the function rollFor:
static int rollFor( int N ) {
// Precondition: N is between 2 and 12, inclusive.
//
// Roll a pair of dice repeatedly until the total on the
// two dice comes up to be N. The number of rolls is returned.
int die1, die2; // Numbers between 1 and 6 representing the dice.
int roll; // Total showing on dice.
int rollCt; // Number of rolls made.
rollCt = 0;
do {
die1 = (int)(Math.random()*6) + 1;
die2 = (int)(Math.random()*6) + 1;
roll = die1 + die2;
rollCt++;
} while ( roll != N );
return rollCt;
}
It's important to be clear about the contract of this subroutine.
It is assumed that N is one of the numbers that could possibly
come up on a pair of dice. That is, N must be one of 2, 3, ...,
or 12. If not, the subroutine will go into an infinite loop since
the condition for continuing the loop, roll != N, will always
be true. It is the responsibility of the caller of the function to
make sure that the actual parameter in the function call satisfies
the conditions of the contract.
The main() routine for this program is trivial. In fact,
it could even be shortened to:
public static void main(String[] args) {
System.out.println("It took " + rollFor(2) + " rolls to get snake eyes.");
} // end main()
The Solution
public class RollFor2 {
/* This program simulates rolling a pair of dice over and over
until the total showing on the two dice is 2. It reports
the number of rolls it took to get a 2. (This was written
to test the subroutine, rollFor.)
*/
public static void main(String[] args) {
int numberOfRolls; // Number of rolls to get a 2.
numberOfRolls = rollFor(2);
System.out.println("It took " + numberOfRolls + " rolls to get snake eyes.");
} // end main()
static int rollFor( int N ) {
// Precondition: N is between 2 and 12, inclusive. (If
// not, this routine will go into an infinite loop!)
//
// Roll a pair of dice repeatedly until the total on the
// two dice comes up to be N. The number of rolls is returned.
int die1, die2; // Numbers between 1 and 6 representing the dice.
int roll; // Total showing on dice.
int rollCt; // Number of rolls made.
rollCt = 0;
do {
die1 = (int)(Math.random()*6) + 1;
die2 = (int)(Math.random()*6) + 1;
roll = die1 + die2;
rollCt++;
} while ( roll != N );
return rollCt;
}
} // end class RollFor2
[ Exercises
| Chapter Index
| Main Index
]