定义类名Money

时间:2016-02-29 04:34:48

标签: java

我坚持使用add / subtract方法定义一个名为Money的类,其对象代表美元金额。该类应该有两个类型为int的实例变量,用于金额和分数。包含一个带有2个int类型参数的构造函数,用于美元和美分,一个带有一个int类型的构造函数,用于美元的零美分和无参数构造函数。包括添加和减去金额的加减法方法,并返回Money类型的值。包括一组合理的访问器和mutator方法以及equals和toString方法。

同样,我被困在加/减部分,只是无法钉住它。加上等于部分有点令人困惑。是的,这是功课。我正在努力,但需要一点推动。

请看一下......

public class Money {

    private static  int dollars;
    private static int cents;

    public Money()
    {

    }

    public Money(int dollars, int cents)
    {
        this.dollars = dollars;
        this.cents = cents;
    }

    public Money(int dollars)
    {
        this.dollars = dollars;
    }



    public int getDollars() {
        return dollars;
    }

    public void setDollars(int dollars) {
        this.dollars = dollars;
    }

    public int getCents() {
        return cents;
    }

    public void setCents(int cents) {
        this.cents = cents;
    }


    public static Money add(Money m1, Money m2)
    {
        int cash = m1.dollars + m2.dollars;
        int change = m1.cents + m2.cents;
        return new Money(dollars, cents);


    }

    public static int MinusMoney(int m3, int m4)
    {
        return (m3-m4);
    }
    public boolean equals(double YourMoney)
    {
        boolean result;
        if (YourMoney > 0)
        {
            dollars += cents;
            result = true;
        }
        else
        {
            result = false;
        }
        return result;


    }

    public String toString()
    {
        return ("$" + getDollars() + "." + getCents());
    }

    public static void main(String[] args)
    {
        Money MyMoney = new Money(2,30);

        System.out.println("You have " + MyMoney.toString());

        Money MyMoney1 = new Money(2,30);
        Money MyMoney2 = new Money(3,10);

        System.out.println("You now have " + Money.add(MyMoney1, MyMoney2));

    }

}

3 个答案:

答案 0 :(得分:1)

要求声明对对象的操作(例如add和subtract)返回一个新实例而不是更改当前实例。因此:

class Money {
    private int dollars;
    private int cents;

    public Money(int dollars, int cents) {
        if (dollars < 0 || cents < 0)
            throw new IllegalArgumentException("Negative dollars or cents");
        this.dollars = dollars;
        this.cents = cents;
    }

    public Money add(Money other) {
        int cents = this.cents + other.cents;
        return new Money(this.dollars + other.dollars + cents / 100, cents % 100);
    }
}

对于equals,通常会将其定义为覆盖Object.equals,这意味着它需要接受Object而不是double

public boolean equals(Object other) {
    return other != null && other.getClass() == Money.class
        && this.dollars == (Money)other.dollars
        && this.cents == (Money)other.cents;
}

答案 1 :(得分:0)

自发布以来,我有一些更新。我想出了加/减,它有效。谢谢你的平等部分,但在那里出现了一个问题。

public boolean equals(Object other) {
    return other != null && other.getClass() == Money.class
        && this.dollars == (Money)other.dollars
        && this.cents == (Money)other.cents

关于other.getClass()的部分......您是指Money Class还是我需要添加更多方法?

public class Money {

    private int dollars;
    private int cents;

    public Money()
    {

    }

    public Money(int dollars, int cents)
    {
        this.dollars = dollars;
        this.cents = cents;
    }

    public Money(int dollars)
    {
        this.dollars = dollars;
    }



    public int getDollars() {
        return dollars;
    }

    public void setDollars(int dollars) {
        this.dollars = dollars;
    }

    public int getCents() {
        return cents;
    }

    public void setCents(int cents) {
        this.cents = cents;
    }

    public static Money add(Money m1, Money m2)
    {
        int dollars1 = m1.getDollars();
        int dollars2 = m2.getDollars();
        int cents1 = m1.getCents();
        int cents2 = m2.getCents();

        int sumDollars = dollars1 + dollars2;
        int sumCents = cents1 + cents2;

        if(sumCents > 100)
        {
            sumDollars = sumDollars +1;
            sumCents = sumCents - 100;
        }
        Money output = new Money(sumDollars, sumCents);
        return output;


    }

    public static Money minus(Money m1, Money m2)
    {
        int dollars1 = m1.getDollars();
        int dollars2 = m2.getDollars();
        int cents1 = m1.getCents();
        int cents2 = m2.getCents();

        int sumDollars = dollars1 - dollars2;
        int sumCents = cents1 - cents2;

        if(sumCents > 100)
        {
            sumDollars = sumDollars +1;
            sumCents = sumCents - 100;
        }
        Money output = new Money(sumDollars, sumCents);
        return output;


    }
    public boolean equals(double YourMoney)
    {
        boolean result;
        if (YourMoney > 0)
        {
            dollars += cents;
            result = true;
        }
        else
        {
            result = false;
        }
        return result;
    }

    public String toString()
    {
    return ("$" + getDollars() + "." + getCents());
    }

    public static void main(String[] args)
{
    Money MyMoney = new Money(2,30);

        System.out.println("You have " + MyMoney.toString());

        Money MyMoney1 = new Money(12,30);
        Money MyMoney2 = new Money(7,10);

        System.out.println("You now have " + Money.minus(MyMoney1, MyMoney2));

}

}

答案 2 :(得分:0)

通过使用2个属性,一个用于美元,一个用于分,您使事情变得复杂。你只需简单地将美元兑换成美分并通过美分或将美元兑换成方法本身。然后使用方法进行计算。 你可以通过

来做到这一点
totalcents1= dollar1*100 +cent1;
totalcents2= dollar2*100 + cent2;
//for add
return totalcents1+totalcents2;
//for substract do check which is greater
return totalcents1-totalcents2;

以美分为单位的逆转流程