2013-02-06 21 views
0

我不斷收到錯誤「構造函數Money類中的Money不能應用於給定類型; required:沒有參數;找到int,int; reason:實際和正式參數列表的長度不同」編譯器錯誤和貨幣類別分配

而且,這裏是我的了,我會進行分級的,如果你發現我的代碼中任何其他錯誤,我可能會碰到後請隨時指出它們對我的計劃目標列表!

使用BlueJ的創建帶有兩個整型實例變量,美元和美分Money類。 提供以下方法:

  1. 初始化實例變量的雙參數構造函數。構造函數 應檢查美分值是否在0到99之間,如果不是,則將一些 美分轉移到美元變量以使其在0和99之間。
  2. 將美元初始化爲0的默認構造函數以及美分爲1.它應該調用 的雙參數構造函數。
  3. 甲一個參數的構造,雖然 美元值設置爲0,此構造也應當檢查美分值在0和99之間 ,並且如果不是,一些毫傳送到元變量初始化美分值到 使其成爲美元和美分
  4. 標準的toString方法
  5. 標準等於如果兩個錢對象具有相同的 狀態比較方法介於0和99
  6. 訪問者。
  7. 將Money對象作爲其參數的加號方法。它創建並返回一個新的Money對象,它表示被調用的plus()方法爲 的對象與參數的總和。它不會修改兩個現有對象的值。

最後,創建創建多個貨幣對象MoneyDemo類。這個演示類 應該測試你已經實現的所有構造函數和方法。

這裏是我的代碼:

public class Money 
{ 
    private int dollars, cents; 
    private static final int CENTS_PER_DOLLAR = 100; 

    public void checkMoney(int dollars, int cents) 
    { 
     while (cents<0) 
     { 
      cents += 100; 
      dollars--; 
     } 
     while (cents>99) 
     { 
      cents -= 100; 
      dollars++; 
     } 
    } 

    public Money() 
    { 
     this.cents = 1; 
     this.dollars = 0; 
    } 

    public void initializeCents(int cents) 
    { 
     while (cents<0) 
     { 
      cents += 100; 
      dollars--; 
     } 
     while (cents>99) 
     { 
      cents -= 100; 
      dollars++; 
     } 
    } 

    public int getDollars() 
    { 
     return dollars; 
    } 

    public int getCents() 
    { 
     return cents; 
    } 

    public String toString() 
    { 
     String str; 
     dollars = dollars + cents/CENTS_PER_DOLLAR; 
     cents = cents % CENTS_PER_DOLLAR; 
     str = "Your total amount is: " + "$" + dollars + "." + cents +""; 
     return str; 
    } 

    public Money plus(Money y) 
    { 
     return new Money(y.dollars, y.cents); 
    } 
} 

public class MoneyDemo 
{ 
    public static void main(String[] args) 
    { 

     int dollars = 5; 
     int cents = 80; 
     Money x = new Money(dollars, cents); 
     x.checkMoney(); 

     dollars = 7; 
     cents = 70; 
     Money y = new Money(dollars, cents); 
     y.checkMoney(); 

     USMoney z = x.plus(y); 

     System.out.println("x: $" + x.dollars + "." + x.cents + "c"); 
     System.out.println("y: $" + y.dollars + "." + y.cents + "c"); 
     System.out.println("x.plus(y): $" + z.dollars + "." + z.cents + "c"); 
    } 
} 

回答

2

要調用

Money x = new Money(dollars, cents);有兩個參數

而且你必須把它定義爲

public Money() // no argument constructor 
{ 
    this.cents = 1; 
    this.dollars = 0; 
} 

因此,使它像這樣:

public Money() // no argument constructor 
{ 
    this.cents = 1; 
    this.dollars = 0; 
} 
public Money(int dollars,int cents) // parametrized constructor 
{ 
    this.cents = dollars; 
    this.dollars = cents; 
} 

因此,它可以同時爲一個無參數的構造函數,並用兩個參數

更新參數化的構造工作:爲plus method`

public Money plus(Money y) 
{ 
    Money m = new Money(); 
    int totalCents = y.cents + this.cents; 
    int totalDollars = y.dollars + this.dollars; 
    if(totalCents > 100) 
    { 
     totalDollars = totalDollars + (int)(totalCents/100); 
     totalCents = (int)(totalCents % 100); 
    } 

    m.dollars = totalDollars; 
    m.cents = totalCents; 

    return m; 
} 
+0

我建議改變無參數的構造函數的身體'這個(0,1);'。這樣,任何其他構造函數只需要添加到一個構造函數中。 –

+0

感謝您的幫助,我添加了該行,並在閱讀完一段文字之後,現在可以瞭解這一點。然而,我現在在我的MoneyDemo類的x.checkMoney()行中得到了同樣的錯誤; 我沒有正確調用checkMoney方法?我很困惑,因爲我已經定義了美元和美分... – user1905170

+0

你有類似的問題,你定義它爲'public void checkMoney(int dollars,int cents)'並且你把它叫做'm.checkMoney() '沒有任何參數 – Abubakkar

0

,你得到的手段,你做的錯誤沒有一個構造函數接受你想傳遞的參數(兩個整數)。你唯一的構造函數沒有參數:

public Money() 

您需要創建一個新的構造,上面寫着

public Money (int cents, int dollars) 

    //make sure that cents is between 0 and 99, if not transfer some cents to dollars 

您將需要一個第三個構造滿足#3你的任務:

public Money (int cents) 
    initialize cents based on the parameter passed into it 
    set dollars = 0 

您還需要重寫equals()方法。

由於這是一項家庭作業,我不會告訴你如何去做這些事情。

讓我知道我是否可以通過任何事情來談論你,或者更詳細地解釋任何事情。

0

問了一下後,我決定嘗試清理我的代碼。我相信我解決了我的構造函數和toString方法的問題,但是我仍然無法理解equals和plus方法。任何幫助,將不勝感激。

這是我的新代碼:

public class Money 
{ 
    int dollars, cents; 

    public Money(int dollars, int cents) 
    { 
     this.cents = dollars; 
     this.dollars = cents; 
     while (cents<0) 
     { 
      cents += 100; 
      dollars--; 
     } 
     while (cents>99) 
     { 
      cents -= 100; 
      dollars++; 
     } 
    } 

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

    public Money(int cents) 
    { 
     this.cents = cents; 
     this.dollars = 0; 
     while (cents<0) 
     { 
      cents += 100; 
      dollars--; 
     } 
     while (cents>99) 
     { 
      cents -= 100; 
      dollars++; 
     } 
    } 

    public int getDollars() 
    { 
     return dollars; 
    } 

    public int getCents() 
    { 
     return cents; 
    } 

    public String toString() 
    { 
     String str; 
     str = "Your total amount is: " + "$" + dollars + "." + cents +""; 
     return str; 
    } 

    public boolean equals(Object obj) 
    { 

     if (money1.dollars == money2.dollars && money1.cents == money2.cents) 
     { 
      return true; 
     } 

     else 
     { 
      return false; 
     } 
    } 

    public Money plus(int money3) 
    { 
     return money3; 
    } 
} 


public class MoneyDemo 
{ 
    public static void main(String [] args) 
    { 
     Money money1 = new Money(13,57); 
     Money money2 = new Money(540,143); 

     System.out.print("Money 2 data: "); 
     System.out.print(money2.getDollars() + " dollars and "); 
     System.out.println(money2.getCents() + " cents"); 

     Money money3; 
     money3 = money1.plus(money2); 

     System.out.print("Money1 data: "); 
     System.out.print(money1.getDollars() + " dollars and "); 
     System.out.println(money1.getCents() + " cents"); 

     System.out.print("Money2 data: "); 
     System.out.print(money2.getDollars() + " dollars and "); 
     System.out.println(money2.getCents() + " cents"); 

     System.out.print("Money 3 data (sum): "); 
     System.out.print(money3.getDollars() + " dollars and "); 
     System.out.println(money3.getCents() + " cents"); 
    } 
}