patternjavaMinor
Given a monetary amount, calculate the equivalent change
Viewed 0 times
theequivalentamountchangemonetarycalculategiven
Problem
I have written a program that takes in some amount of money, and prints the equivalent change (starting at hundred dollars, to fifty, to twenty, down the pennies). Here is the code:
What I want to know is that without using loops or any iterative structures is this an acceptable way to accomplish this task? What would be a more elegant way? (those chains of modulo division are ugly)
System.out.print("Enter amount of money: ");
Scanner scan = new Scanner(System.in);
double value = scan.nextDouble();
int valueIntegral = (int) value;
int valueFractional = (int) Math.round(100 * value - 100 * valueIntegral);
// Integral values
int hundred = valueIntegral / 100;
int fifty = (valueIntegral % 100) / 50;
int twenty = ((valueIntegral % 100) % 50) / 20;
int ten = (((valueIntegral % 100) % 50) % 20) / 10;
int five = ((((valueIntegral % 100) % 50) % 20) % 10) / 5;
int one = (((((valueIntegral % 100) % 50) % 20) % 10) % 5) / 1;
// Fractional values
int quarter = valueFractional / 25;
int dime = (valueFractional % 25) / 10;
int nickel = ((valueFractional % 25) % 10) / 5;
int penny = (((valueFractional % 25) % 10) % 5) / 1;
System.out.println(hundred + " hundred dollar bills\n" +
fifty + " fifty dollar bills\n" +
twenty + " twenty dollar bills\n" +
ten + " ten dollar bills\n" +
five + " five dollar bills\n" +
one + " one dollar bills\n" +
quarter + " quarters\n" +
dime + " dimes\n" +
nickel + " nickels\n" +
penny + " pennies");What I want to know is that without using loops or any iterative structures is this an acceptable way to accomplish this task? What would be a more elegant way? (those chains of modulo division are ugly)
Solution
Without loops or similar "advanced" structures, there isn't much you can do to simplify this.
You could save the duplication in extra variables. It might look like this:
You have to decide if it's more readable. It's certainly less complex (and mistakes/typos are easier to catch), but it might take away some clarity.
Misc
You could save the duplication in extra variables. It might look like this:
int hundred = valueIntegral / 100;
int remainderHundred = valueIntegral % 100;
int fifty = remainderHundred / 50;
int remainderFifty = remainderHundred % 50;
int twenty = remainderFifty / 20;
int remainderTwenty = remainderFifty % 50;
int ten = remainderTwenty / 10;
[...]You have to decide if it's more readable. It's certainly less complex (and mistakes/typos are easier to catch), but it might take away some clarity.
Misc
- you have a bit too much vertical space. Not every line needs its own paragraph.
- your comments don't add all that much value. The variable names already tell me all the comments do.
Code Snippets
int hundred = valueIntegral / 100;
int remainderHundred = valueIntegral % 100;
int fifty = remainderHundred / 50;
int remainderFifty = remainderHundred % 50;
int twenty = remainderFifty / 20;
int remainderTwenty = remainderFifty % 50;
int ten = remainderTwenty / 10;
[...]Context
StackExchange Code Review Q#121700, answer score: 5
Revisions (0)
No revisions yet.