Java – min change greedy algorithm in java

doublegreedyjavaminimum

Ok so i need to make a program to ask me for an amount of money, then I need it to tell me the least amount of coins to make it. The coins I can use are: dollars, quarters, dimes, nickels, and pennies. For example, When I run the program it's supposed to look like this:

> run Coins
Enter the amount of given money:
 [1.73]
Give the seller 8 coins:
1 dollars,
2 quarters,
2 dime,
0 nickels,
3 pennies.

This is What I have so far:

import java.util.Scanner;

class Coins {
  public static void main (String args[]) {
     Scanner input = new Scanner(System.in);
     double  money;
     System.out.println("Enter the amount of money ");
     money = input.nextDouble();




     while (money > 0.0 ){
       if (money >= 1) {
          System.out.println(money/1+"dollars");
          money -= 1;

     }
       else if (money>=.25) {
         System.out.println(money/.25+"quarters");
         money-=.25;

       }
       else if (money>=.10) {
         System.out.println(money/.10+"Dimes");
         money-=.10;
       }
       else if (money>=.05) {
         System.out.println(money/.05+"Nickels");
         money-=.05;
       }
       else if (money>=.01) {
         System.out.println(money/.01+"Penny");
         money-=.01;
       }
     }        
  }
}  

The part I need help with is this: If I run the program and enter the amount 1.73, the way I have the code written, it takes the number 1.73, divides it by 1, and prints "1.73 dollars". I need a way to get rid of the decimal part so instead of printing "1.73 dollars", it prints "1 dollar". But I'm not sure how to do this. I tried converting it to an int but it messes up the flow of the other statements. Please help me.

Best Answer

You should use the combination of floor with casting to double, the following code works:

class Coins {
    public static void main (String args[]) {
        double  money = 1.73;

        while (money > 0.0 ){
            if (money >= 1) {
                System.out.println(Math.floor(money/1)+" dollars");
                money -= Math.floor(money/1)*(double)1;

            }
            else if (money>=.25) {
                System.out.println(Math.floor(money/.25)+" quarters");
                money-=Math.floor(money/.25)*(double).25;

            }
            else if (money>=.10) {
                System.out.println(Math.floor(money/.10)+" Dimes");
                money-=Math.floor(money/.10)*(double).10;
            }
            else if (money>=.05) {
                System.out.println(Math.floor(money/.05)+" Nickels");
                money-=Math.floor(money/.05)*(double).05;
            }
            else if (money>=.01) {
                System.out.println(Math.round(money/.01)+" Penny");
                money-=Math.round(money/.01)*(double).01;
            }
        }
    }
}

Another bug you had:
You should subtract Math.floor(money/XXX)*(double)XXX not (double)XXX