Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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 integer
int 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); } }