2016-11-29 77 views
-1

我工作的其中規定的程序:複製私有數據成員

創建一個Java類股票代表大約是買進和賣出股票的信息....每當股票價格發生變化時,每股價格的變化也會更新。忽略二傳手每股價格的變化。每股價格的變化只會在每股價格變化時確定。不要在構造函數中包含價格變化參數。初始化更改爲零。

我想通過計算股價變化的唯一方法是創建第四個變量(originalPrice),將其等同於sharePrice並將其減去。但是,這不起作用,我不知道如何爲變量創建「深層」副本。有沒有辦法讓originalPrice成爲sharePrice的副本,然後再與sharePrice分開更新?感謝您的幫助!

股票類:

public class Stock { 
    private String name; 
    private double sharePrice; 
    private double originalPrice; 
    private double changeSharePrice = 0; 

    /** 
    * @param name 
    * @param sharePrice 
    * @param changeSharePrice 
    */ 
    public Stock(String stockName, double sharePrice) { 
     setName(stockName); 
     setSharePrice(sharePrice); 
    } 

    /** 
    * @return the name 
    */ 
    public String getName() { 
     return name; 
    } 

    /** 
    * @param name the name to set 
    */ 
    public void setName(String stockName) { 
     this.name = stockName; 
    } 

    /** 
    * @return the sharePrice 
    */ 
    public double getSharePrice() { 
     return sharePrice; 
    } 

    /** 
    * @param sharePrice the sharePrice to set 
    */ 
    public void setSharePrice(double sharePrice) { 
     this.sharePrice = sharePrice; 
     originalPrice = sharePrice; 
     changeSharePrice = sharePrice - originalPrice; 
    } 

    /** 
    * @return the changeSharePrice 
    */ 
    public double getChangeSharePrice() { 
     return changeSharePrice; 
    } 

    /* 
    * (non-Javadoc) 
    * 
    * @see java.lang.Object#toString() 
    */ 
    @Override 
    public String toString() { 
     return "Stock Name: " + name + "/n Price Per Share: " + sharePrice + "/n Change in Price Per Share: " 
      + changeSharePrice; 
    } 

    /* 
    * Copy Constructor 
    */ 
    public Stock(Stock other) { 
     name = other.name; 
     sharePrice = other.sharePrice; 
     changeSharePrice = other.changeSharePrice; 
    } 

    /* 
    * Deep copy method 
    */ 
    public Stock copy() { 
     return new Stock(name, sharePrice); 
    } 

    /* 
    * (non-Javadoc) 
    * 
    * @see java.lang.Object#equals(java.lang.Object) Equals Method 
    */ 
    public boolean equals(Object obj) { 
     Stock other = (Stock) obj; 
     if (name == other.name) 
      return true; 
     else 
      return false; 
    } 
} 

這裏是我的主:

public class tester { 

    public static void main(String[] args) { 
     // An object is created for Nomad Foods Limited 
     Stock one = new Stock("NOMD", 10.46); 
     //An object is created for Treehouse Foods 
     Stock two = new Stock("THS", 69.18);   
     one.setSharePrice(4.00); 
     System.out.print(one.getChangeSharePrice()); 
    } 
} 
+1

爲什麼不工作?你得到什麼輸出? –

+0

這是什麼*複製構造函數*業務?這不是C++ –

回答

0

你的整體邏輯看起來聲音,但你有一個問題:

public void setSharePrice(double sharePrice) { 
    this.sharePrice = sharePrice; 
    originalPrice = sharePrice; 
    changeSharePrice = sharePrice - originalPrice; 
} 

您設置originalPrice等於sharePrice,然後你將兩者的差異。這當然是零。

如果你重新排列你的語句,你應該得到你想要的結果:

public void setSharePrice(double sharePrice) { 
    changeSharePrice = sharePrice - this.sharePrice; 
    this.sharePrice = sharePrice; 
} 

這甚至可以讓你與originalPrice做掉。

PS:這與您的主要問題無關,但您的equals()方法有一個錯誤。請勿使用==來比較字符串,而應使用String.equals()。因此name == other.name應該是name.equals(other.name)

+0

'changeSharePrice'不應該是原始值嗎? (因此變量的名稱) –

+0

@ScaryWombat我不確定。我認爲這些要求是不明確的。我知道這是每次更新時價格的變化,但您也可以將其作爲自原始更改以來的更改。 – dave

+0

如果你是對的,那麼你的答案是**蜜蜂膝蓋** –

0

更改您的構造函數

public Stock(String stockName, double sharePrice) { 
    setName(stockName); 
    this.sharePrice = sharePrice; 
    this.originalPrice = sharePrice; 

} 

假設你想要的changeSharePrice值從原來的值的變化,然後改變你的二傳手到

public void setSharePrice(double sharePrice) { 
    this.sharePrice = sharePrice; 
    changeSharePrice = sharePrice - originalPrice; 

}