2016-11-29 75 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; 

}