public class Dispenser { public Teller.Result dispense(double request) { int dol
ID: 3784184 • Letter: P
Question
public class Dispenser {
public Teller.Result dispense(double request) {
int dollars = (int)request;
double remainder1 = request - dollars;
int quarters = (int)(remainder1 / 0.25);
double remainder2 = remainder1 - quarters * 0.25;
int dimes = (int)(remainder2 / 0.1);
double remainder3 = remainder2 - dimes * 0.1;
int nickels = (int)(remainder3 / 0.05);
double remainder4 = remainder3 - nickels * 0.05;
int pennies = (int)(remainder4 / 0.01);
int coins[] = {dollars, quarters, dimes, nickels, pennies};
double total = coins[0] * 1.0 + coins[1] * 0.25 + coins[2] * 0.1 + coins[3] * 0.05 + coins[4] * 0.01;
return new Teller.Result(coins, total);
}
}
***There are 2 major errors in the dispenser unit. The first is coin counting. The second is the computation of the total. Correct these errors in the code. You should not modify the other modules***
public class Dispenser {
public Teller.Result dispense(double request) {
int dollars = (int)request;
double remainder1 = request - dollars;
int quarters = (int)(remainder1 / 0.25);
double remainder2 = remainder1 - quarters * 0.25;
int dimes = (int)(remainder2 / 0.1);
double remainder3 = remainder2 - dimes * 0.1;
int nickels = (int)(remainder3 / 0.05);
double remainder4 = remainder3 - nickels * 0.05;
int pennies = (int)(remainder4 / 0.01);
int coins[] = {dollars, quarters, dimes, nickels, pennies};
double total = coins[0] * 1.0 + coins[1] * 0.25 + coins[2] * 0.1 + coins[3] * 0.05 + coins[4] * 0.01;
return new Teller.Result(coins, total);
}
}
Explanation / Answer
Your Concept and method is right but you ignore floating point operation errors. Like
a=10.5
b=0.5
then a/b=21.0 but in double precision a=10.50000000000011125 or something else this may create problem and change your result.
My method is to first multiply your complete money with 100, convert money into int, then separate dollars, quarters, dimes, nickles and pennies by using integer division and remainder operator.
public class Dispenser { public Teller.Result dispense(double request) { int request1=request*100; // convert fractional value into integerint dollars = request1/100; // by dividing we get dollars
int remainder = request1%100; // remaining except from dollar
int remainder1=remainder;
int quarters = (int)(remainder1/25); // Remain money from dollar is converted into quartes
int remainder2 = remainder1%25; // Remainder after quarters
int dimes = (int)(remainder2 / 10); // Remain money from quarters is converted into dimes
int remainder3 = remainder2%10; // Remainder after dimes
int nickels = (int)(remainder3 / 5); // Remain money from dimes is converted into nickels
int pennies = remainder3%5; // Remain Pennies int coins[] = {dollars, quarters, dimes, nickels, pennies}; double total = coins[0] * 1.0 + coins[1] * 0.25 + coins[2] * 0.1 + coins[3] * 0.05 + coins[4] * 0.01; return new Teller.Result(coins, total); } }
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.