> ### Solution for
> Programming Exercise 2.4

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

> Exercise 2.4: Write a program that helps the user count his change. The program should ask how many quarters the user has, then how many dimes, then how many nickles, then how many pennies. Then the program should tell the user how much money he has, expressed in dollars.

> Discussion

> The program will need variables to represent the number of each type of coin. Since the number of coins has to be an integer, these variables are of type `int`. I'll call the variables `quarters`, `dimes`, `nickles`, and `pennies`.

> The total value of the coins, when expressed in dollars, can be a non-integer number such as 1.57 or 3.02. Since the total value in dollars is a real number, I will use a variable of type `double` to represent it. The variable is named `dollars`

> The outline of the program is clear enough:

>                Declare the variables.
>                Ask the user for the number of each type of coin, and read the responses.
>                Compute the total value of the coins, in dollars.
>                Display the result to the user.

> The function `TextIO.getlnInt()` can be used to read each of the user's responses. The alternative function `TextIO.getInt()` could also be used, but it is less safe. Suppose, for example, that the user responds to the request to type in the number of quarters by entering "7 quarters". After `TextIO.getlnInt()` reads the number 7, it will discard the extra input "quarters". `TextIO.getInt()` will read the 7 correctly, but the extra input is not discarded. Later, when the program tries to read the number of dimes, it sees the left-over input and tries to read that, without giving the user a chance to type in another response. You might want to experiment and see what happens if you change `getlnInt()` to `getInt()`. (Of course, if the user's response is "I have 7 quarters" or "seven", then you are out of luck in any case.)

> Since one quarter is worth 0.25 dollars, the number of dollars in N quarters is 0.25*N. Similarly, a dime is worth 0.10 dollars, a nickle is 0.05 dollars, and a penny is 0.01 dollars. So, to get the total value of all the user's coins, I just have to add up `(0.25*quarters) + (0.10*dimes) + (0.05*nickles) + (0.01*pennies)`. This value is assigned to the variable, `dollars`, and that is the result that is displayed to the user.

> Alternatively, I could first have computed the total number of cents in all the coins, and then divided by 100 to convert the amount into dollars:

>                 int totalCents;   // Total number of cents in the coins.

>                 totalCents = 25*quarters + 10*dimes + 5*nickles + pennies;
>                 dollars = totalCents/100.0;

> Since `totalCents` is if type `int`, it is essential here that I compute `dollars` as `totalCents/100.0` and not as `totalCents/100`. The value computed by `totalCents/100` is an integer. For example, if `totalCents` is 397, then `totalCents/100` is 3. Using `totalCents/100.0` forces the computer to compute the answer as a real number, giving 3.97.

> The Solution

>         public class CountChange {

>            /*  This program will add up the value of a number of quarters,
>                dimes, nickles, and pennies.  The number of each type of
>                coin is input by the user.  The total value is reported
>                in dollars.  This program depends on the non-standard class,
>                TextIO.
>            */

>            public static void main(String[] args) {

>               int quarters;   // Number of quarters, to be input by the user.
>               int dimes;      // Number of dimes, to be input by the user.
>               int nickles;    // Number of nickles, to be input by the user.
>               int pennies;    // Number of pennies, to be input by the user.

>               double dollars; // Total value of all the coins, in dollars.

>               /* Ask the user for the number of each type of coin. */

>               TextIO.put("Enter the number of quarters:  ");
>               quarters = TextIO.getlnInt();

>               TextIO.put("Enter the number of dimes:     ");
>               dimes = TextIO.getlnInt();

>               TextIO.put("Enter the number of nickles:   ");
>               nickles = TextIO.getlnInt();

>               TextIO.put("Enter the number of pennies:   ");
>               pennies = TextIO.getlnInt();

>               /* Add up the values of the coins, in dollars. */

>               dollars = (0.25 * quarters) + (0.10 * dimes)
>                                   + (0.05 * nickles) + (0.01 * pennies);

>               /* Report the result back to the user. */

>               TextIO.putln();
>               TextIO.putln("The total in dollars is $" + dollars);

>            }  // end main()

>         }  // end class

> [ Exercises | Chapter Index | Main Index ]