Solution for
Programming Exercise 2.5


THIS PAGE DISCUSSES ONE POSSIBLE SOLUTION to the following exercise from this on-line Java textbook.

Exercise 2.5: If you have N eggs, then you have N/12 dozen eggs, with N%12 eggs left over. (This is essentially the definition of the / and % operators for integers.) Write a program that asks the user how many eggs she has and then tells the user how many dozen eggs she has and how many extra eggs are left over.

A gross of eggs is equal to 144 eggs. Extend your program so that it will tell the user how many gross, how many dozen, and how many left over eggs she has. For example, if the user says that she has 1342 eggs, then your program would respond with

        Your number of eggs is 9 gross, 3 dozen, and 10

since 1342 is equal to 9*144 + 3*12 + 10.


Discussion

All the variables for the program will be of type int. The quantities that we have to represent are: the number of eggs, the number of dozens in that many eggs, and the number of left over eggs. I will declare variables named eggs, dozens, and extras to represent these quantities.

The number of eggs can be read from the user's input using eggs = TextIO.getlnInt().

The description of the problem already tells us that dozens can be computed as eggs/12 and extras can be computed as eggs%12. So, the first version of the program is easy to write.

The improved version requires a little thought. Given a pile of eggs that you want to divide into gross, dozens, and extras, you could first remove as many gross as possible, leaving a pile of between 0 and 143 eggs. This is just like dividing the pile into dozens, except that the unit of measure is 144 eggs instead of 12. So, eggs/144 will give the number of gross, and eggs%144 is the number of eggs left over. Next, the eggs left in the pile still have to be divided into dozens, plus some extra number of eggs between 0 and 11. Of course, we already know how to do this: If there are N eggs in the pile, the number of dozens is N/12 and the number of extra eggs is N%12. This leads to the computation in the improved version of the program, shown below. (Note that this program uses the variable named aboveGross to represent a quantity that is not mentioned explicitly in the problem description. This is far from being unusual.)


The Solution

First version:

    public class Dozens {
      
       /*  This program will convert a given number of eggs into
           the number of dozens plus the number of left over eggs.
           For example, 57 eggs is 4 dozen eggs plus 9 eggs left over.
           The number of eggs is input by the user, and the computed
           results are displayed. 
       */
    
       public static void main(String[] args) {
       
          int eggs;    // Number of eggs, input by user.
          int dozens;  // How many dozens in that number of eggs?
          int extras;  // How many eggs are left over, above an integral
                       //    number of dozens?  This value is in the
                       //    range 0 to 11, and it is computed as
                       //    the remainder when eggs is divided by 12.
       
          TextIO.put("How many eggs do you have?  ");
          eggs = TextIO.getlnInt();
          
          dozens = eggs / 12;
          extras = eggs % 12;
          
          TextIO.put("Your number of eggs is ");
          TextIO.put(dozens);
          TextIO.put(" dozen and ");
          TextIO.put(extras);
          TextIO.putln();
       
       }  // end main()

    }  // end class

Improved version:

    public class GrossAndDozens {
      
       /*  This program will convert a given number of eggs into
           the number of gross plus the number of dozens plus the
           number of left over eggs.
              For example, 1342 eggs is 9 gross plus 3 dozen plus 10.
           The number of eggs is input by the user, and the computed
           results are displayed. 
       */
    
       public static void main(String[] args) {
       
          int eggs;         // Number of eggs, input by user.
          int gross;        // How many gross in that number of eggs?
          int aboveGross;   // How many eggs are left over, above an
                            //    integral number of gross?  This number
                            //    can be computed as eggs % 144, and is
                            //    in the range 0 to 143.  This number will
                            //    be divided into dozens and extras.
          int dozens;       // How many dozens in aboveGross?
          int extras;       // How many eggs are left over, above integral
                            //    numbers of gross and dozens? 
       
          TextIO.put("How many eggs do you have?  ");
          eggs = TextIO.getlnInt();
          
          gross = eggs / 144;
          aboveGross = eggs % 144;
          
          dozens = aboveGross / 12;
          extras = aboveGross % 12;          
          
          TextIO.put("Your number of eggs is ");
          TextIO.put(gross);
          TextIO.put(" gross, ")
          TextIO.put(dozens);
          TextIO.put(" dozen, and ");
          TextIO.put(extras);
          TextIO.putln();
       
       }  // end main()

    }  // end class

[ Exercises | Chapter Index | Main Index ]