Follow Techotopia on Twitter

On-line Guides
All Guides
eBook Store
iOS / Android
Linux for Beginners
Office Productivity
Linux Installation
Linux Security
Linux Utilities
Linux Virtualization
Linux Kernel
System/Network Admin
Programming
Scripting Languages
Development Tools
Web Development
GUI Toolkits/Desktop
Databases
Mail Systems
openSolaris
Eclipse Documentation
Techotopia.com
Virtuatopia.com
Answertopia.com

How To Guides
Virtualization
General System Admin
Linux Security
Linux Filesystems
Web Servers
Graphics & Desktop
PC Hardware
Windows
Problem Solutions
Privacy Policy

  




 

 

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 ]

 
 
  Published under free license. Design by Interspire