【问题标题】:PiggyBank program with constructors, mutators, and accessors带有构造函数、修改器和访问器的 PiggyBank 程序
【发布时间】:2017-05-08 23:41:08
【问题描述】:

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

编写这个程序最有效的方法是什么?尽管它可以正常工作,但我知道它的设计并不是最好的。

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

我确实使用了另一个站点来查找访问器和修改器的结构。我不认为我错过了什么太重要的事情,但我现在想不出我还需要做什么。

【问题讨论】:

  • 清理了代码格式。它大部分都在那里,只是错过了几个“}”。小拼音。添加了标点符号。删除了关于问题可以理解但不相关的行。

标签: java constructor accessor mutators


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 感谢您的帮助!
【解决方案2】:
public final int breakTheBank()`
{
if(total >= 0)
{
    total = 0;
}

return (int) total;
}

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

【讨论】:

  • 感谢您的帮助!
【解决方案3】:

一个是输出中的舍入问题

这是我在四舍五入时倾向于使用的一种方法,所以当你输出一个总数时,只需调用它。可以在此处找到有关舍入数字的更多信息: 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 的枚举,其中 is 采用该硬币价值的浮点数。然后创建另一个方法,例如 addCoin ,它需要一个硬币枚举和要添加的数量。然后通过访问枚举中硬币的值并将其乘以添加的数量来简单地计算结果。

【讨论】:

  • 感谢您的支持
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多