2014-03-06 57 views
0

我在學校的作業,我要顯示正由用戶輸入的量小於1.00,但大於0的每筆金額作品正確的變化除了在第十位上有1或6的兩位數的東西。例如0.11,.16 0.21,0.26等無法得到輸入正確的輸出0.11

這是我的代碼

import java.util.Scanner; 

public class AmountChange 
{ 
    public static void main(String[] args) 
    { 
     // 
     double amt; 
     int cents, quarter, dime, nickle, penny; 

     Scanner keyboard = new Scanner(System.in); 

     //To get the users input 
     System.out.println("Change in Coins"); 
     System.out.println("---------------"); 
     System.out.println("Enter the amount less than $1.00, " + 
         "\nbut more than zero."); 
     System.out.print("\nEnter amount: "); 
     amt = keyboard.nextDouble(); 

     //Loop for incorrect input 
     while (amt < 0 || amt > 1.00) 
     { 
     System.out.println("Please enter the amount less than $1.00," 
          + "\nbut more than zero."); 
     System.out.print("\nRe-enter amount: "); 
     amt = keyboard.nextDouble(); 
     } 

     // 
     cents = (int)(amt * 100 + .1); 

     quarter = cents/25; 
     cents %= 25; 

     dime = cents/10; 
     cents %= 10; 

     nickle = cents/5; 
     cents %= 5; 

     penny = cents; 

     // ---------------------------------------------------------- 
     if (quarter > 1) 
     { 
     System.out.print("\nYou will need " + quarter + " quarters, "); 
     } 
     else if (quarter == 1) 
     { 
     System.out.print("\nYou will need " + quarter + " quarter ,"); 
     } 
     else 
     { 
     System.out.print("\nYou will need no quarters, "); 
     } 

     // ---------------------------------------------------------- 
     if (dime > 1) 
     { 
     System.out.print(dime + " dimes, "); 
     } 
     else if (dime == 1) 
     { 
     System.out.print(dime + " dime, "); 
     } 
     else 
     { 
     System.out.print("no dimes, "); 
     } 

     // ---------------------------------------------------------- 
     if (nickle > 1) 
     { 
     System.out.print(nickle + " nickles, "); 
     } 
     else if (nickle == 1) 
     { 
     System.out.print(nickle + " nickle, "); 
     } 
     else 
     { 
     System.out.print("no nickles, "); 
     } 

     // ---------------------------------------------------------- 
     if (penny > 1) 
     { 
     System.out.print("and " + penny + " pennies."); 
     } 
     else if (quarter == 1) 
     { 
     System.out.print("and " + penny + " penny."); 
     } 
     else 
     { 
     System.out.print("and no pennies."); 
     }  
    } 
} 

回答

2

啊,切的喜悅和粘貼:-)

if (penny > 1) 
{ 
    System.out.print("and " + penny + " pennies."); 
} 
else if (quarter == 1) // <<<<< LOOK HERE !!! 
{ 
    System.out.print("and " + penny + " penny."); 
} 
else 
{ 
    System.out.print("and no pennies."); 
}  

應是penny,而不是quarter

而且,事實上,它實際上確實爲.26工作(儘管你斷言),因爲quarter設置爲1,同爲penny。事實上,它會工作,其中四分之三的數量等於便士(.26.52.78)數量的任何值,但只能通過事故。


順便說一句,你可能要考慮的另一件事是重構所有重複的代碼是這樣的:

import java.util.Scanner; 

public class Test 
{ 
    static double getAmount(Scanner keyboard) { 
     System.out.println("Enter the amount between zero and $1.00."); 
     System.out.print("\nEnter amount: "); 
     return keyboard.nextDouble(); 
    } 

    static String mkeTxt (int val, String prefix, String singular, String plural) { 
     if (val == 0) 
      return prefix + "no " + plural; 
     if (val == 1) 
      return prefix + "1 " + singular; 
     return prefix + val + " " + plural; 
    } 

    public static void main(String[] args) 
    { 
     double amt; 
     int cents, quarter, dime, nickle, penny; 

     Scanner keyboard = new Scanner(System.in); 

     System.out.println("Change in Coins"); 
     System.out.println("---------------"); 
     amt = getAmount(keyboard); 
     while (amt < 0 || amt > 1.00) 
      amt = getAmount(keyboard); 

     cents = (int)(amt * 100 + .1); 
     quarter = cents/25; 
     cents %= 25; 
     dime = cents/10; 
     cents %= 10; 
     nickle = cents/5; 
     cents %= 5; 
     penny = cents; 

     System.out.print("\nYou will need "); 
     System.out.print(mkeTxt(quarter,"", "quarter", "quarters")); 
     System.out.print(mkeTxt(dime,", ", "dime", "dimes")); 
     System.out.print(mkeTxt(nickle,", ", "nickle", "nickles")); 
     System.out.print(mkeTxt(penny," and ", "penny", "pennies")); 
     System.out.println("."); 
    } 
} 

使用一個函數來輸出提示並接受輸入,使用戶輸入代碼更容易維護,因爲您只需要在一個地方更改交互。

真正的保護是mkTxt()功能給你一個字符串,自動神奇地調整到硬幣的量。它在main()中擺脫了if/then/else塊的大量組合,有助於可讀性。

如果你發現自己做了類似的事情很多次,但有不同的價值觀,這正大聲疾呼變成一些描述函數或循環。

1

你只是有一個簡單的錯字! 變化:

else if (quarter == 1){ 
    System.out.print("and " + penny + " penny."); 
} else { 
    System.out.print("and no pennies."); 
} 

要,

else if (penny == 1){ 
    System.out.print("and " + penny + " penny."); 
} else { 
    System.out.print("and no pennies."); 
}