不能计算包含两个阵列列表的arraylist的大小

时间:2016-11-28 06:17:50

标签: java arraylist

我希望我能清楚地解释我的问题: 有三个班级。

  1. 获得LamboghinimodelYearmodelNamehorsepower的课程boolean

  2. LamboghiniCarLot,其中包含一个arraylist清单(向其中添加一些lamboghini元素)。

  3. LamboghiniDealershipGroup,其中包含arraylist carLots。 现在,在LamboghiniDealershipGroup课程中,我尝试制作方法public int getTotalInventoryCount();但是,我无法正确计算库存。我的输出总是为0.我想这可能是因为我添加到arraylist的方式是错误的。但我不知道如何解决这个问题。

  4. public Lamborghini(int modelYear, String modelName, double horsepower, boolean isRearWheelDrive)
    {
        setModelYear(modelYear);
        setModelName(modelName);
        setHorsepower(horsepower);
        setIsRearWheelDrive(isRearWheelDrive);
    }
    
    public class LamborghiniCarLot
    {
        private String lotName;
        private ArrayList<Lamborghini> inventory;
    
    
    /**
     * creates the inventory ArrayList object;
     * the inventory remains empty (no Lamborghini objects are added when this constructor is called)
     */
    public LamborghiniCarLot()
    {
        inventory = new ArrayList<Lamborghini>();
    }
    
    /**
     * An example of a method - replace this comment with your own
     * 
     * @param  y   a sample parameter for a method
     * @return     the sum of x and y 
     */
    public LamborghiniCarLot(String lotName)
    {
    
        setLotName(lotName);
    
    
        inventory = new ArrayList<Lamborghini>();
        inventory.add(new Lamborghini(1965, "350GT", 365.3, true));
        inventory.add(new Lamborghini(1966, "400GT 2+2", 366.3, false));
        inventory.add(new Lamborghini(1967, "MIURA", 367.3, true));
        inventory.add(new Lamborghini(1968, "espada", 368.3, false))
    
    
        }
    public void setLotName(String lotName)
        {
            if(lotName != null)
            {    
                if(lotName.equals("Taylor's Used Lambos"))
                {
                    this.lotName = "Jason's Used Lambos";
                }else
                {
                    this.lotName = lotName;
                }
            }
    
        }
    
        public void addLamborghini(Lamborghini newLamborghini)
        {
            if(inventory != null && newLamborghini != null && inventory.size() > 0)
            {
                for(Lamborghini lambo : inventory)
                {
                    if(lambo == null)
                    {
                        inventory.add(newLamborghini);
                    }
                }
            }
        }
        public ArrayList<Lamborghini> getInventory()
            {
                return inventory;
            }}
    
    然后,第三节课。

    public LamborghiniDealershipGroup(String dealershipGroupName)
    {
    
        setDealershipGroupName(dealershipGroupName);
    
        carLots = new ArrayList<LamborghiniCarLot>();
        //Create the first car lot
        LamborghiniCarLot carlot1 = new LamborghiniCarLot();
    
        carlot1.setLotName("Jason's vintage lambos.");
        carlot1.addLamborghini(new Lamborghini(1965, "350GT", 365.3, true));
        carlot1.addLamborghini(new Lamborghini(1966, "400GT 2+2", 366.3, false));
        carlot1.addLamborghini(new Lamborghini(1967, "MIURA", 367.3, true));
    
    
        //Create the second car lot
        LamborghiniCarLot carlot2 = new LamborghiniCarLot();
    
        carlot2.setLotName("Taylor's brand new lambos.");
    
        carlot2.addLamborghini(new Lamborghini(2006, "gallardo", 506.3, true));
        carlot2.addLamborghini(new Lamborghini(2007, "gallardo", 507.3, true));
    
    
        //Add them to the arraylist
        carLots.add(carlot1);
        carLots.add(carlot2);
    
    
    }
    

    我的方法在这里:

    public int getTotalInventoryCount()
    {
        int count = 0;
    
    
        for(LamborghiniCarLot c : carLots)
        {
            count += c.getInventory().size();
        }
        return count;
    }
    

    方法总是得到int 0.我该如何修复它?

2 个答案:

答案 0 :(得分:1)

非常奇怪:

public void addLamborghini(Lamborghini newLamborghini) {
    if (inventory != null && newLamborghini != null && inventory.size() > 0) {
        for (Lamborghini lambo : inventory) {
            if (lambo == null) {
                inventory.add(newLamborghini);
            }
        }
    }
}

让我们摆脱困境。

  • 如果inventory不是null ...
  • ...而且newLamborghini不是null ...
  • ......并且库存中至少有一个项目......
  • 然后我们迭代清单中的所有项目。
  • 如果其中一项是null ...
  • ...我们将newLamborghini添加到广告资源中。

几乎所有这些都是不必要的,这就是为什么你不插入任何内容的主要原因 - 你的收藏开始为空。即使它不是,也不要向它添加任何null元素以满足内部foreach循环。

您可以将其简化为更合理的检查,以确定您要插入的元素是null,以及您插入的集合是否为null

if(inventory != null && newLamborghini != null) {
    inventory.add(newLamborghini);
}

如果您急切地初始化了inventory集合(通过撰写ArrayList<Lamborghini> inventory = new ArrayList<>();),则可以避免nullinventory进行检查。

答案 1 :(得分:0)

您应该在LamborghiniCarLot类中添加以下两个方法。它应该工作。

public void setLotName(String lotName) {
    this.lotName = lotName;
}

public void addLamborghini(Lamborghini lamborghini) {
    inventory.add(lamborghini);
}