2015-11-04 23 views
0

我有一個對象共享:轉換相同的字符串值爲對象

Share tea = new Share("TEA", "Common", 0, 100); 

ArrayList<Share> shares = new ArrayList<Share>(); 
shares.add(tea); 

我希望做的是,從keybord讀取參數,直接在「茶經」字符串轉換成份額的茶object:

Trade trade = new Trade(tea, Boolean.parseBoolean(buyOrSell), Integer.parseInt(quantity), Double.parseDouble(tradePrice)); 

我應該把什麼,而不是茶,因爲我的構造函數正在等待一個共享,而不是一個字符串。用戶輸入一個字符串,我不需要創建一個新的實例,我必須使用已經存在的共享對象「茶」。

的Share.java類:

public class Share { 

private String shareSymbol = ""; 
private String type = "Common"; 
private double lastDividend = 0; 
private double fixedDividend = 0; 
private int parValue = 0; 

// Calucul values 


public String getShareSymbol() { 
    return shareSymbol; 
} 

public String getType() { 
    return type; 
} 

public double getLastDividend() { 
    return lastDividend; 
} 

public double getFixedDividend() { 
    return fixedDividend; 
} 

public int getParValue() { 
    return parValue; 
} 

// Constructor without Fixed Dividend 
public Share(String shareSymbol, String type, int lastDividend, int parValue) { 
    this.shareSymbol = shareSymbol; 
    this.type = type; 
    this.lastDividend = lastDividend; 
    this.parValue = parValue; 
} 

// Constructor with Fixed Dividend 
public Share(String shareSymbol, String type, int lastDividend, 
     int fixedDividend, int parValue) { 
    this(shareSymbol, type, lastDividend, parValue); 
    this.fixedDividend = fixedDividend/100.0; 
} 
public String toString(){ 
    String result=""; 
    result += shareSymbol + "    "+type + "  " + lastDividend + "   " + fixedDividend + "   " + parValue + "\n"; 
    return result; 
} 

} 

的Trade.java類:

import java.util.ArrayList; 
import java.util.Calendar; 
import java.util.Date; 
import java.util.Iterator; 

// The class trade allows the stock, the quantity and the price to be intialised 
public class Trade { 
Share share; 
private int quantity; 
double price; 
private double dividendYield; 
private double pERatio; 
private boolean buyOrSell; 
private Date tradeDate; 

public Trade(Share share, boolean buyOrSell, int quantity, double price) { 
    this.share = share; 
    this.buyOrSell = buyOrSell; 
    this.quantity = quantity; 
    this.price = price; 
    tradeDate = Calendar.getInstance().getTime(); 

} 



public String toString() { 
    String result = ""; 
    result += "stock symbol : " + share.getShareSymbol() + " \n"; 
    result += "Buy or Sell : " + buyOrSell + " \n"; 
    result += "quantity :" + quantity + " \n"; 
    result += "price : " + price + " \n"; 
    result += "Dividend Yield : " + dividendYield + " \n"; 
    result += "P/E Ratio : " + pERatio + " \n"; 
    result += "tradeDate : " + tradeDate + " \n\n"; 
    return result; 

} 

public Share getShare() { 
    return share; 
} 

public int getQuantity() { 
    return quantity; 
} 

public double getPrice() { 
    return price; 
} 

public double getDividendYield() { 
    return dividendYield; 
} 

public double getpERatio() { 
    return pERatio; 
} 

public Date getTradeDate() { 
    return tradeDate; 
} 

public double calcDividendYield() { 
    if ("Common".equalsIgnoreCase(share.getType())) { 
     dividendYield = share.getLastDividend()/price; 
    } else if ("Preferred".equalsIgnoreCase(share.getType())) { 
     dividendYield = share.getFixedDividend() * share.getParValue() 
       /price; 
    } 

    return dividendYield; 
} 

public double calcPERatio() { 
    if (dividendYield > 0) 
     pERatio = price/dividendYield; 
    return pERatio; 
} 

} 
+0

編寫一個將'String'轉換爲'Share'對象並使用它的方法。 –

+1

如果沒有關於Share和Trade類的更多信息,我認爲不可能回答這個問題。 –

+0

ok @PaulBoddington我剛剛添加了代碼,添加了Share和Trade類。 –

回答

0

你的構造函數等待份額。所以給它:

/* Read parameters from keyboard, stock in s1, s2, i1 and i2 variables */  
Trade trade = new Trade(new Share(s1,s2,i1,i2), Boolean.parseBoolean(buyOrSell), Integer.parseInt(quantity), Double.parseDouble(tradePrice)); 

否則,你可以實現一個方法(在股份類別)爲你

public static Share stringToShare(String s1, String s2, int t1, int t2){ 
    return new Share(s1, s2, t1, t2); 
} 

,然後實現它:

Trade trade = new Trade(Share.stringToShare(...), Integer.parseInt(quantity), Double.parseDouble(tradePrice)); 

編輯:更好使用真正的變量名稱意味着什麼,而不是s1,s2等。

+0

感謝您的回答,但正如我所說的,我的份額已經創建並且形成了一個arraylist(份額)的成員,我只需要用他的名字(即:茶)來調用構造函數。 –

+0

同樣的方式,我正在投三個其他的論點,我必須做的第一個,但這不是一個原始類型! –

0

我身邊的這個得到的,通過創建一個新的構造:

 Trade trade = new Trade(shares, stockSymbol, Boolean.parseBoolean(buyOrSell), 
         Integer.parseInt(quantity), Double.parseDouble(tradePrice)); 

然後,這是新的構造:

public Trade(ArrayList<Share> shares, String stockSymbol, 
      boolean buyOrSell, int quantity, double price) { 
     Iterator<Share> iter = shares.iterator(); 
     int index = -1; 
     while (iter.hasNext()) { 
      Share share = iter.next(); 
      index++; 
      if (stockSymbol.equalsIgnoreCase((share.getShareSymbol()))) { 
       this.share = shares.get(index); 
       this.buyOrSell = buyOrSell; 
       this.quantity = quantity; 
       this.price = price; 
       tradeDate = Calendar.getInstance().getTime(); 

       break; 
      } 
     } 

    } 

這是一個有點complacated,因爲我還創建一個獲取給定字符串的共享的新方法(例如具有相同的名稱)。但那是我所需要的。 雖然使用Java Reflection進行創建,但不需要創建新的構造函數,但它會更乾淨。因此,如果任何人有更聰明的代碼想法,我會很高興!