【问题标题】:cannot count the size of an arraylist which contains two arrayllists无法计算包含两个数组列表的数组列表的大小
【发布时间】:2016-11-28 06:17:50
【问题描述】:

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

  1. Lamboghini 正在获取 modelYearmodelNamehorsepowerboolean

  2. LamboghiniCarLot 有一个 arraylist 库存(添加一些 lamboghini 元素到它)。

  3. LamboghiniDealershipGroup 具有arraylist carLots。 现在,在LamboghiniDealershipGroup 类中,我尝试创建一个方法public int getTotalInventoryCount();但是,我无法正确计算库存。我的输出一直是 0。我想这可能是因为我添加到 arraylist 的方式是错误的。但我不知道如何解决这个问题。


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。我该如何解决它?

【问题讨论】:

  • LamborghiniCarLot 类缺少几个方法(addLamborghini(...)setLotName(...))。你也可以发布这些吗?
  • addLamborghini() 是做什么的?我注意到您有两个LamborghiniCarLot 的构造函数,一个带有添加内容的名称参数,一个没有添加内容的参数。您是否还有两个LamborghiniDealershipGroup 的构造函数,而您正在调用另一个不添加任何内容的构造函数?另外,请阅读“How to create a Minimal, Complete, and Verifiable example”。
  • 我确实有这些方法,在这里我已经重新发布了。请帮忙
  • 问题似乎出在addLamborghini(...)方法上,具体来说就是inventory.size() &gt; 0这个条件。 inventory 列表的大小为零,因为您使用的是无参数构造函数(不向列表添加项目的构造函数)。

标签: java arraylist


【解决方案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&lt;Lamborghini&gt; inventory = new ArrayList&lt;&gt;();),您可以避开null 检查inventory

【讨论】:

  • 天啊!这就是我的方法无法获得数组列表大小的原因。非常感谢你!!!我已经被这个问题困住了几个小时。再次感谢您的耐心回答:)
【解决方案2】:

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

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

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

【讨论】:

  • 说真的,我们假设他有那种代码。但谁知道呢,也许你的答案是对的。
  • inventory.size() > 0。这是问题所在。您使用的是无参数构造函数,因此库存大小始终为零,并且永远不会添加新项目。
猜你喜欢
  • 2016-10-02
  • 2016-12-08
  • 1970-01-01
  • 2020-05-23
  • 2015-01-06
  • 2021-10-14
  • 1970-01-01
  • 2018-06-15
  • 2022-08-15
相关资源
最近更新 更多