簡體   English   中英

如何編寫toString()和equals()方法?

[英]How to write toString() and equals() methods?

我試圖讓這段代碼打印實際數字,而不是十六進制位置。

public class MoneyDriver
{
  //This is a driver for testing the class
  public static void main(String[] args)
  {
      final int BEGINNING = 500;
      final Money FIRST_AMOUNT = new Money(10.02);
      final Money SECOND_AMOUNT = new Money(10.02);
      final Money THIRD_AMOUNT = new Money(10.88);

      Money balance = new Money(BEGINNING);
      System.out.println("The current amount is " +
        balance.toString());
      balance = balance.add(SECOND_AMOUNT);
      System.out.println("Adding " + SECOND_AMOUNT +
        " gives " + balance.toString());
      balance = balance.subtract(THIRD_AMOUNT);
      System.out.println("Subtracting " + THIRD_AMOUNT +
        " gives " + balance.toString());



      boolean equal = SECOND_AMOUNT.equals(FIRST_AMOUNT);
      if(equal)
        System.out.println(SECOND_AMOUNT + " equals "
            + FIRST_AMOUNT);
      else
        System.out.println(SECOND_AMOUNT.toString() +
            " does not equal " + FIRST_AMOUNT);

      equal = THIRD_AMOUNT.equals(FIRST_AMOUNT);
      if(equal)
        System.out.println(THIRD_AMOUNT + " equals " +
            FIRST_AMOUNT);
      else
        System.out.println(THIRD_AMOUNT + " does not equal "
            +   FIRST_AMOUNT);
  }
}

這是由moneydriver調用的主要類

public class Money
{
  private long dollars;
  private long cents;


  public Money(double amount)
  {
    if (amount < 0)
    {
      System.out.println(
             "Error: Negative amounts of money are not allowed.");
      System.exit(0);
    }
    else
    {
      long allCents = Math.round(amount*100);
      dollars = allCents/100;
      cents = allCents%100;
    }
  }

  public Money add(Money otherAmount)
  {
    Money sum = new Money(0);
    sum.cents = this.cents + otherAmount.cents;
    long carryDollars = sum.cents/100;
    sum.cents = sum.cents%100;
    sum.dollars = this.dollars
                 + otherAmount.dollars + carryDollars;
    return sum;
  }

  public Money subtract (Money amount)
  {
    Money difference = new Money(0);
    if (this.cents < amount.cents)
    {
      this.dollars = this.dollars - 1;
      this.cents = this.cents + 100;
    }
    difference.dollars = this.dollars - amount.dollars;
    difference.cents = this.cents - amount.cents;
    return difference;
  }


  public int compareTo(Money amount)
  {
    int value;
    if(this.dollars < amount.dollars)
    {
      value = -1;
    }
    else if (this.dollars > amount.dollars)
    {
      value = 1;
    }
    else if (this.cents < amount.cents)
    {
      value = -1;
    }
    else if (this.cents > amount.cents)
    {
      value = 1;
    }
    else
    {
      value = 0;
    }
    return value;
  }
}

目標是編寫equals方法(在main類上)。 該方法將調用對象的實例變量與參數對象的實例變量進行相等性比較,如果調用對象的美元和美分與參數對象的美元和美分相同,則返回true。 否則,它返回false。

toString方法(在main類上)。 此方法將返回一個看起來像錢的字符串,包括美元符號。 請記住,如果你的價格低於10美分,你需要在打印美分之前加上0才能正確顯示2位小數。

如果兩種方法都正確實現

根據tutorialspoint,你應該做任何一個

String toString()
static String toString(int i)

但是提供的moneydriver已經有了tostring方法,但沒有顯示數字,而是顯示變量的十六進制位置。

equals方法已經在moneydriver中使用了,所以我也有點迷失了。

正確的輸出應如下所示

當前金額為$ 500.00加$ 10.02給$ 510.02減$ 10.88給$ 499.1 $ 10.02等於$ 10.02 $ 10.88不等於$ 10.02

完全失去了這一點,提前感謝您的幫助。

要在Money類上獲取String輸出,請執行類似於以下操作的操作:

public class Money
{
   private long dollars;
   private long cents;

   // suggested approach for constructor
   public Money(long amount) throws IllegalArgumentException
   {
      if (amount < 0) {
        throw new IllegalArgumentException("Amount may not be less than 0");
      }

      // do other stuff
   }

   ...

   public String toString()
   {
     return String.format("%d.%02d", dollars, cents);
   }

   public boolean equals(Object obj)
   {
      boolean equal = false;

      if (obj instanceof Money) {
         Money chk = (Money)obj;
         equal = (chk.dollars == this.dollars &&
                  chk.cents == this.cents);
      }
      return equal;
   }
} // end class Money

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM