Programming C, C++, Java, PHP, Ruby, Turing, VB
Computer Science Canada 
Programming C, C++, Java, PHP, Ruby, Turing, VB  

Username:   Password: 
 RegisterRegister   
 ChangeMaker Help
Index -> Programming, Java -> Java Help
View previous topic Printable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic
Author Message
Grentex




PostPosted: Sat Oct 10, 2015 3:29 pm   Post subject: ChangeMaker Help

So I have to make a changemaker using methods and what not.
Lab says

Use the minimum number of coins. $1.39 also equals 0 quarters, 0 dimes, 0 nickels and 139 pennies, but you're not going to have a very successful career as a cashier if you make change in this way.
In this second program, keep your ChangeMaker class flexible by NOT having it include any input or output to/from the console. This way, it can be used in a console application, windows application, or web application!
Also, please note that I've included a toString() method which is a standard method that returns a string to describe the class.
Also test with $1.15 to make sure you get the right answer. This number gets stored as 1.14999999, so it needs some rounding to get it right. Be sure to handle this in your solution.



Tester class
code:

import java.util.Scanner;

public class Assignment1ChangeMaker {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        ChangeMaker c1 = new ChangeMaker();
        System.out.print("Please set the amount of money that you wish to convert into change: $");
        c1.setMoney(sc.nextDouble());
        c1.calculateChange();
        System.out.println(c1.toString());     
    }
   
}




Method Class
code:

public class ChangeMaker {
    private double money;
    private int numberOfQuarters;
    private int numberOfDimes;
    private int numberOfNickels;
    private int numberOfPennies;
   
    public ChangeMaker(){
        money = 0.00;
        numberOfQuarters = 0;
        numberOfDimes = 0;
        numberOfNickels = 0;
        numberOfPennies = 0;
    }
   
    public double getMoney(){
        return money;
    }
    public void setMoney(double amount){
        this.money = (double) Math.round(amount * 100.0) / 100.0;
    }
    public void calculateChange(){
        numberOfQuarters = (int) Math.floor(money  / 0.25) ;
        numberOfDimes = (int) Math.floor((money - 0.25 * numberOfQuarters) / 0.10);
        numberOfNickels = (int) Math.floor((money - 0.25 * numberOfQuarters - 0.10 * numberOfDimes) / 0.05);
        numberOfPennies = (int) Math.floor((money - 0.25 * numberOfQuarters - 0.10 * numberOfDimes - 0.05 * numberOfNickels) / 0.01);
    }
    public String toString(){
       return "$" + money +" equals " + numberOfQuarters + " quarters, " + numberOfDimes + " dimes, " + numberOfNickels + " nickels, and " + numberOfPennies + " pennies.";
    }
}


It was going fine but whenever you input 1.4999999 you suddenly lose a penny. In fact, after doing some testing apparently it always loses a penny whenever there is one quarter, one dime, and more than 2 pennies.

For example:$0.43 equals 1 quarters, 1 dimes, 1 nickels, and 2 pennies.
    
Working ones: $1.12 equals 4 quarters, 1 dimes, 0 nickels, and 2 pennies.
    
    
    
$1.13 equals 4 quarters, 1 dimes, 0 nickels, and 2 pennies.
    
    
    
    
    
$1.62 equals 6 quarters, 1 dimes, 0 nickels, and 2 pennies.
    
    
    
$1.38 equals 5 quarters, 1 dimes, 0 nickels, and 2 pennies.
    
    
    
    
    
$1.09 equals 4 quarters, 0 dimes, 1 nickels, and 4 pennies.

Any help for this would be great. Smile
Sponsor
Sponsor
Sponsor
sponsor
Insectoid




PostPosted: Sat Oct 10, 2015 5:17 pm   Post subject: RE:ChangeMaker Help

This is the result of floating point precision errors, and this is usually the assignment where students discover the problem. There's a really, really easy solution that involves not using floating point numbers at all. See if you can figure it out.
Grentex




PostPosted: Sat Oct 10, 2015 7:11 pm   Post subject: RE:ChangeMaker Help

Alright you lost me, from what I can tell its telling me to use BigDecimal, which I can't use. So either I break the lab rules, or not be able to hand it in. great
DemonWasp




PostPosted: Sat Oct 10, 2015 9:25 pm   Post subject: RE:ChangeMaker Help

You almost never get an assignment in school that's actually impossible -- if it looks impossible, then either you aren't reading the assignment correctly or you're missing some way of solving the problem.

In this case, ask yourself: what is the smallest unit of currency you will need to handle? (hint: not dollars, since you sometimes need fractions of a dollar)
Grentex




PostPosted: Sun Oct 11, 2015 12:15 pm   Post subject: Re: RE:ChangeMaker Help

DemonWasp @ Sat Oct 10, 2015 9:25 pm wrote:
You almost never get an assignment in school that's actually impossible -- if it looks impossible, then either you aren't reading the assignment correctly or you're missing some way of solving the problem.

In this case, ask yourself: what is the smallest unit of currency you will need to handle? (hint: not dollars, since you sometimes need fractions of a dollar)


If you are talking about essentially doing this
code:

private int numberOfPennies;

public void setMoney(double money) {
    numberOfPennies = (int) Math.round(money * 100);
}

public void calculateChange() {
    // subtract 25s, then 10s, then 5s, then 1s, until 0.
}


I does not work, I tried and then STILL ended up with 1 penny missing even though I am using penny as the the full amount.
Insectoid




PostPosted: Sun Oct 11, 2015 3:00 pm   Post subject: RE:ChangeMaker Help

code:
private int numberOfPennies


You're on the right track here. Tell me, why do you need to use doubles, or even decimal points, at all?
Display posts from previous:   
   Index -> Programming, Java -> Java Help
View previous topic Tell A FriendPrintable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic

Page 1 of 1  [ 6 Posts ]
Jump to:   


Style:  
Search: