Java 带有构造函数、变异器和访问器的PiggyBank程序

Java 带有构造函数、变异器和访问器的PiggyBank程序,java,constructor,accessor,mutators,Java,Constructor,Accessor,Mutators,有两件事我需要帮助。一个是输出中的舍入问题,另一个只是为了找到更好的方法来编写输出相同结果的程序,如果必要的话 写这个程序最有效的方法是什么?尽管它的工作原理和它应该的一样,但我知道它并不是设计得最好的 package program2; import java.util.*; class PiggyBank { Scanner console = new Scanner( System.in ); private int numPennies, numNickles, n

有两件事我需要帮助。一个是输出中的舍入问题,另一个只是为了找到更好的方法来编写输出相同结果的程序,如果必要的话

写这个程序最有效的方法是什么?尽管它的工作原理和它应该的一样,但我知道它并不是设计得最好的

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" );
    }
}
我确实使用了另一个站点来查找访问器和变异器的结构。我不认为我错过了什么太重要的事情,但我只是想不出此刻我还需要做什么

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

return (int) total;
}
我只想将if语句更改为
if(total==0)
,因为如果要将其更改为0,则不需要检查它是否为0。除此之外,您可以进行的更改不多

一个是输出中的舍入问题

这里有一种方法,我倾向于在对十进制数进行舍入时使用,所以当您输出一个总数时,只需调用它。有关舍入数的更多信息,请参见此处:

公共静态双循环(双值,整数位){
如果(位置<0)抛出新的IllegalArgumentException();
BigDecimal bd=新的BigDecimal(值);
bd=bd.setScale(位置,舍入模式,向上舍入);
返回bd.doubleValue();
}
找到一种更好的方法来编写输出相同结果的程序

如果让我做这件事的话,我会使用枚举法,你可以为每一枚硬币创建一个枚举值。如果您不确定如何使用枚举,请查看此处以了解更多信息

在您的案例中,您需要做的是创建一个名为Coins的枚举,其中is获取该硬币价值的浮点值。然后创建另一个方法,例如addCoin,其中需要一个硬币枚举和要添加的金额。然后简单地通过访问枚举中硬币的值并将其乘以添加的金额来计算结果

找到一种更好的方法来编写输出相同结果的程序

我会在文本包中使用NumberFormat类。通过这种方式,您可以将数字格式化为默认货币(在本例中为美元)。您也不需要将float强制转换为total变量,因为您将它声明为float实例变量

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

您可以像这样使用格式化程序来打印格式化的$#。###,这样可以避免显式添加美元符号。

谢谢您的帮助!谢谢你的帮助!感谢您的帮助清理了代码格式。它大部分都在那里,只是错过了几个“}”。小拼写。添加标点符号。删除了关于问题可理解、不相关的行。
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();
}
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;
}
bank.addPennies(4);     
System.out.println("Bank has" + formatter.format(bank.getContents()) + " in it    \n");