2017-05-08 28 views
0

有两件事我需要帮助。一个是在输出中四舍五入的问题,另一个是找到一个更好的方式来编写我的程序,如果有必要,输出相同的结果。PiggyBank程序与构造函数,增变器和访问器

什么是写这个程序最有效的方法?尽管它的工作原理应该如此,但我知道它并不是最好的。

package program2; 

import java.util.*; 

class PiggyBank 
{ 
    Scanner console = new Scanner(System.in); 

    private int numPennies, numNickles, numDimes, numQuarters; 
    private float total; 

    public PiggyBank(int pennies, int nickles, int dimes, int quarters) 
    { 
     numPennies = pennies; 
     numNickles = nickles; 
     numDimes = dimes; 
     numQuarters = quarters; 
     total = (float) 0.00; 
    } 

    public void addPennies(int pennies) 
    { 
     System.out.println("Have entered " + pennies + " pennies"); 

     if (pennies < 0) 
     { 
      System.out.println("No Pennies Added"); 
     } 
     else 
     { 
      numPennies = numPennies + pennies; 
      total = (float) (total + pennies * 0.01); 
     } 
    } 

    public void addNickles(int nickles) 
    { 
     System.out.println("Have entered " + nickles + " nickles"); 

     if (nickles < 0) 
     { 
      System.out.println("No Nickles Added"); 
     } 
     else 
     { 
      numNickles = numNickles + nickles; 
      total = (float) (total + nickles * 0.05); 
     } 
     System.out.println("Bank has $" + total + " in it"); 
     System.out.println(); 
    } 

    public void addDimes(int dimes) 
    { 
     System.out.println("Have entered " + dimes + " dimes"); 

     if (dimes < 0) 
     { 
      System.out.println("No Dimes Added"); 
     } 
     else 
     { 
      numDimes = numDimes + dimes; 
      total = (float) (total + dimes * 0.10); 
     } 
     System.out.println("Bank has $" + total + " in it"); 
     System.out.println(); 
    } 

    public void addQuarters(int quarters) 
    { 
     System.out.println("Have entered " + quarters + " quarters"); 

     if (quarters < 0) 
     { 
      System.out.println("No Quarters Added"); 
     } 
     else 
     { 
      numQuarters = numQuarters + quarters; 
      total = (float) (total + quarters * 0.25); 
     } 
    } 

    public float getContents() 
    { 
     return total; 
    } 

    public final int breakTheBank() 
    { 
     if (total >= 0) 
     { 
      total = 0; 
     } 

     return (int) total; 
    } 

} 

public class PiggyBankTester 
{ 

    public static void main(String[] args) 
    { 
     Scanner console = new Scanner(System.in); 

     System.out.print("Program By "); 
     String name = console.next(); 
     System.out.println(); 

     test(); 
    } 

    public static void test() 
    { 
     PiggyBank bank = new PiggyBank(0, 0, 0, 0); 

     bank.addNickles(3); 

     bank.addPennies(4); 
     System.out.println("Bank has $" + bank.getContents() + " in it \n"); 

     bank.addPennies(-18); 
     System.out.println("Bank has $" + bank.getContents() + " in it \n"); 

     bank.addDimes(2); 
     bank.addQuarters(3); 
     System.out.println("Bank has $" + bank.getContents() + " in it \n"); 

     bank.addQuarters(-3); 
     System.out.println("Bank has $" + bank.getContents() + " in it \n"); 

     System.out.println("Broke the bank and got $" + bank.getContents() + " from it \nBank has $" + bank.breakTheBank() + " in it"); 
    } 
} 

这是我的输出示例。浮点数总计取得了一些结果,但我不知道如何让它围绕所有结果。

Program By JakeBrono46 

Have entered 3 nickles 
Bank has $0.15 in it 

Have entered 4 pennies 
Bank has $0.19000001 in it 

Have entered -18 pennies 
No Pennies Added 
Bank has $0.19000001 in it 

Have entered 2 dimes 
Bank has $0.39000002 in it 

Have entered 3 quarters 
Bank has $1.14 in it 

Have entered -3 quarters 
No Quarters Added 
Bank has $1.14 in it 

Broke the bank and got $1.14 from it 
Bank has $0 in it 

我没有使用另一个站点来查找访问器和增变器的结构。我不认为我错过了太重要的东西,但我现在无法想到我还需要做什么。

+0

清理完代码格式。主要是在那里,只是错过了一对“}”。小拼字。添加标点符号。删除关于问题可以理解,不相关的行。 – mateuscb

回答

0

找到一个更好的方式来写我的程序输出相同的结果

import java.util.*; 
import java.text; 

class PiggyBank 
{ 
Scanner console = new Scanner(System.in); 
NumberFormat formatter = NumberFormat.getCurrencyInstance(); 

private int numPennies, numNickles, numDimes, numQuarters; 
private float total; 

public PiggyBank(int pennies, int nickles, int dimes, int quarters) 
{ 
    numPennies = pennies; 
    numNickles = nickles; 
    numDimes = dimes; 
    numQuarters = quarters;  
    total = 0.00; 
} 

我会使用NumberFormat类的文本包。通过这种方式,您可以将数字格式设置为默认货币(在这种情况下为美元)。自从您将其声明为浮点实例变量以来,您也不需要将浮点数转换为总变量。

bank.addPennies(4);  
System.out.println("Bank has" + formatter.format(bank.getContents()) + " in it \n"); 

您使用格式化像这样打印的格式$#。##,让您避免明确增加一个美元符号。

+0

感谢您的协助! – JakeBrono46

0
public final int breakTheBank()` 
{ 
if(total >= 0) 
{ 
    total = 0; 
} 

return (int) total; 
} 

我只想改变if语句if(total == 0),因为你并不需要检查它是否是0,如果你打算把它改为0反正。除此之外,您可以做出的改变并不多。

+0

感谢您的协助! – JakeBrono46

0

一个与输出

这里舍入的一个问题是,我倾向于四舍五入十进制数字时使用,所以当你输出总只是把它的方法。更多信息可以在这里找到有关舍入数字: Round a double to 2 decimal places

public static double round(double value, int places) { 
    if (places < 0) throw new IllegalArgumentException(); 

    BigDecimal bd = new BigDecimal(value); 
    bd = bd.setScale(places, RoundingMode.HALF_UP); 
    return bd.doubleValue(); 
} 

找到一个更好的方式来写我的程序输出相同的结果

如果我的任务是要做到这一点我会使用枚举,你可以为每个硬币创建一个枚举值。如果你不确定如何使用枚举来查看更多信息,https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

你想要在你的情况下做什么是创建一个名为Coins的枚举,其中是一个浮点值那枚硬币。然后为实例addCoin创建另一个方法,其中需要枚举枚举和额外金额。然后通过访问枚举中硬币的值并将其乘以所添加的金额来计算结果。

+0

谢谢您的保证 – JakeBrono46

相关问题