2016-08-16 39 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