2013-01-23 46 views
3

好吧,所以我需要做一個程序來問我一筆錢,然後我需要它告訴我最少的硬幣數量。我可以使用的硬幣有:美元,宿舍,硬幣,鎳幣和便士。例如,當我運行程序它應該是這樣的:分鐘在java中更改貪婪算法

> 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. 

這是我有什麼至今:

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; 
     } 
    }   
    } 
} 

我需要幫助的部分是這樣的:如果我運行程序並輸入數量1.73,我寫代碼的方式是1.73,數字除以1,打印「1.73美元」。我需要一種方法來擺脫小數部分,而不是打印「1.73美元」,它打印「1美元」。但我不知道如何做到這一點。我試着把它轉換成一個int,但它弄亂了其他語句的流程。請幫幫我。

回答

2

你需要擺脫分裂後的其餘部分。您可以使用Math.floor()這個:

class Coins { 
    public static void main (String args[]) { 

    double money = 1.73; 

    int dollars = (int) Math.floor(money/1); 
    money -= dollars * 1; 

    int quarters = (int) Math.floor(money/0.25); 
    money -= quarters * 0.25; 

    int dimes = (int) Math.floor(money/0.10); 
    money -= dimes * 0.10; 

    int nickels = (int) Math.floor(money/0.05); 
    money -= nickels * 0.05; 

    int pennies = (int) Math.round(money * 100); 

    System.out.println("Dollars: " + dollars); 
    System.out.println("Quarters: " + quarters); 
    System.out.println("Dimes: " + dimes); 
    System.out.println("Nickels: " + nickels); 
    System.out.println("Pennies: " + pennies); 
    } 
} 

,導致:

Dollars: 1 
Quarters: 2 
Dimes: 2 
Nickels: 0 
Pennies: 3 
+0

它不會工作(有一個錯誤) - 試試吧! – alfasin

+0

@alfasin很抱歉讓你失望,但是我寫了完整的程序,它工作得很好......除了'Math.floor()'的一些鑄造問題和硬幣的數量(見更新的答案) – Veger

+0

現在你編輯了你的答案 - 它會工作(刪除-1和更改爲+1),並且它的工作原理僅僅是因爲您通過添加'dollars *'和'quarters *'等方法修復了錯誤。 – alfasin

2

您應該使用的floor組合與鑄造double,下面的代碼工作:

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; 
      } 
     } 
    } 
} 

另一個bug你有:
你應該減去Math.floor(money/XXX)*(double)XXX不是(double)XXX

+0

爲什麼你使用while循環(掛起應用程序),if語句(不做任何事情)和冗餘的'Math.floor()'要求每種硬幣類型..?我想你(也)沒有嘗試你的實現? – Veger

+0

@Veger關於冗餘的好處!雖然我測試了我的代碼(有幾個測試用例),但它確實工作正常:) – alfasin