2016-08-16 55 views
0

這就是我如何定義數組列表的構造函數。如何添加到構造函數外部的數組列表(其元素在構造函數中定義)?

public Quantity(String strMagnitude, String multiplier, String unit, 
        String strType) 
{ 
     this.setMagnitude(strMagnitude); 
     this.multiplier = multiplier; 
     this.unit = unit; 
     this.setType(strType); 
    } 

現在我想另一個元素絕對量添加到這個列表:

private static List<Quantity> getAbsoluteQuantities(List<Quantity> quantities) 
    { 
     List<Quantity> absoluteQuantities = new ArrayList<Quantity>(); 

float absoluteMagnitude; 
    // loop through quantities 
    for (Quantity quantity : quantities){ 
     Float magnitude = quantity.getMagnitude(); 
     String multiplier = quantity.getMultiplier(); 
     String unit = quantity.getUnit(); 
     UnitType type = quantity.getType(); 

     if (multiplier != null){ 
      float multiplierValue = populateMultiplierFromFile().get(multiplier); 
      //System.out.println(multiplierValue); 
      absoluteMagnitude = magnitude * multiplierValue; 
      } 
     else { 
      absoluteMagnitude = magnitude; 
     } 
      String strMagnitude = String.valueOf(absoluteMagnitude); 
      String strType = String.valueOf(type); 
      String originalMagnitude = String.valueOf(magnitude); 
     //The line below is where I get the error 
      absoluteQuantities.add(originalMagnitude, multiplier, strType, unit,strMagnitude); 

    } 
    return absoluteQuantities; 
} 

}

我該怎麼辦呢?我一直收到一個錯誤,告訴我當它的格式是(String,String,String,String)時,我無法用(String,String,String,String,String)定義一個列表。

+2

您的帖子中沒有足夠的信息來解決您的問題。考慮發佈一個小型自包含的完整示例。 – Kylar

+0

這看起來像你把5個輸入參數放到一個只接受的函數中4 – printfmyname

+0

你在做新的ArrayList而不是新的數量嗎? –

回答

1

更改行:

  //The line below is where I get the error 
      absoluteQuantities.add(originalMagnitude, multiplier, strType, unit,strMagnitude); 

 absoluteQuantities.add(new Quantity(originalMagnitude, multiplier, strType, unit,strMagnitude)); 

你想一個Quantity實例添加到List<Quantity>,因此你應該先構建Quantity實例,然後將其追加到列表

基於來自OP的響應的更新 您實際上想要將absoluteMagnitude傳遞給您的Quantity實例,該實例僅實際採用4個參數 - originalMagnitudemultiplier,unitstrType

您可以通過以下兩個步驟執行此操作:使用重載的構造函數

  1. 構造函數鏈。在這裏,你定義了一個帶有5個參數的構造器的超載。所以,你的Quantity類有兩個構造函數 - 一個你定義和其他重載一個這需要在absoluteMagnitude

    公共產品數量(字符串strMagnitude,串器,串單元, 字符串strType) { //調用chanined構造函數的默認值爲absoluteMagnitude this(strMagnitude,multiplier,unit,strType,「0.0」); }

    public Quantity(String strMagnitude, String multiplier, String unit, 
            String strType, String absoluteMagnitude) 
    { 
        //initialize class level variabes using the parameter values 
    } 
    
  2. 公開一個getter/setter對用於各個屬性。因此,也將用於absoluteMagnitude個體對屬性

    公共字符串getAbsoluteMagnitude() { 返回this.absoluteMagnitude; }

    公共無效setAbsoluteMagnitude(字符串絕對星等) { this.absoluteMagnitude =絕對星等; }

現在,當你想不指定absoluteMagnitude值,那麼你調用了4個參數的構造函數來創建一個Quantity實例。然後可以使用setter在稍後階段設置absoluteMagnitude值。

如果您想要指定absoluteMagnitude值,請使用接受5個參數的構造函數的其他重載版本。

+0

@PrahladDeshpande已經嘗試過了。給我這個錯誤:構造函數Quantity(String,String,String,String,String)未定義 – serendipity

+0

@PrahladDeshpanse非常感謝!這正是我所期待的! – serendipity