首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定义类名Money

定义类名Money
EN

Stack Overflow用户
提问于 2016-02-29 12:34:48
回答 3查看 3.1K关注 0票数 0

我坚持使用add/subtract方法来定义一个名为money的类,该类的对象表示美国货币的数量。该类应该有两个类型为int的实例变量,分别表示美元和美分的金额。包括一个构造函数和一个无参数构造函数,其中一个构造函数具有两个类型为int的参数,其中一个构造函数的类型为int,其中一个类型的构造函数用于美元的数量为零美分。包括用于对金额进行加法和减法加法和减法,并返回money类型的值。包括一组合理的访问器和赋值器方法,以及方法equals和toString。

再一次,我被加/减部分卡住了,就是不能确定它。另外,equals部分有点令人困惑。是的,这是家庭作业。我在尽我最大的努力,但需要一点推动力。

请看一下……

代码语言:javascript
复制
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));

    }

}
EN

回答 3

Stack Overflow用户

发布于 2016-02-29 12:42:32

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

代码语言:javascript
复制
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

代码语言:javascript
复制
public boolean equals(Object other) {
    return other != null && other.getClass() == Money.class
        && this.dollars == (Money)other.dollars
        && this.cents == (Money)other.cents;
}
票数 1
EN

Stack Overflow用户

发布于 2016-02-29 13:01:36

自从发帖后,我有了一点更新。我算出了加/减,它起作用了。感谢您的相等部分,但其中出现了一个问题。

代码语言:javascript
复制
public boolean equals(Object other) {
    return other != null && other.getClass() == Money.class
        && this.dollars == (Money)other.dollars
        && this.cents == (Money)other.cents

关于other.getClass()的部分...Are你指的是Money类,或者这是我需要添加更多方法的东西?

代码语言:javascript
复制
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));

}

}
票数 0
EN

Stack Overflow用户

发布于 2016-02-29 13:54:04

你使用了两个属性,一个是美元,一个是美分,这让事情变得复杂起来。在method itself.Then中,您可以简单地将美元转换为美分并传递美分,或者将美元转换为美分。使用method可以轻松地执行计算。你可以通过以下方式来完成

代码语言:javascript
复制
totalcents1= dollar1*100 +cent1;
totalcents2= dollar2*100 + cent2;
//for add
return totalcents1+totalcents2;
//for substract do check which is greater
return totalcents1-totalcents2;

1美分对1美元的反向过程

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35692043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档