gpt4 book ai didi

java - 获取“index : 0"and "size:0"error from ArrayList. size()

转载 作者:太空宇宙 更新时间:2023-11-04 06:58:12 25 4
gpt4 key购买 nike

我已经在这个程序上工作了几个小时,并且已经解决了几乎所有其他类(class)中出现的错误。然而,我似乎可以修复接收方法。接收方法应首先检查(通过比较 SKU)传入的产品是否已在 myCatalog 中。如果没有,请将产品(通过其 SKU)添加到目录中。之后,无论如何 - 只要仍有一些传入的产品尚未放入垃圾箱 - 我想找到哪个垃圾箱包含的总量最少。 (如果所有垃圾箱已满,请添加一个新的空垃圾箱以供使用)我会将特定产品添加到该垃圾箱中,直到垃圾箱已满(此时我会重复)或我用完该产品。重复此过程,直到没有更多传入产品剩余为止。

public class Warehouse
{
private int myBinMax;
private ArrayList<MusicMedia> myCatalog;
private ArrayList<Bin> myBins;
public Warehouse( int binMax )
{
myBinMax = binMax;
myCatalog = new ArrayList<MusicMedia>();
myBins = new ArrayList<Bin>( 5 );
}

public String toString()
{
return Tester.detailedInventory(myCatalog,myBins);
}

public void addBin()
{
myBins.add( new Bin( "B" + myBins.size() ) );
}

public void receive( MusicMedia product, int quantity )
{
boolean contained = false;
int lowestAmount = myBinMax,
leastFullBinIndex,
i,
insertQuantity;

for(MusicMedia entry : myCatalog)
{
if(entry.getSKU().equals(product.getSKU()))
{
contained = true;
}
}

if(!contained)
{
myCatalog.add(product);
}

while(quantity > 0)
{
lowestAmount = myBinMax;
for(i = 0; i < myBins.size(); i++)
{
if(myBins.get(i).totalQuantity() < lowestAmount)
{
lowestAmount = myBins.get(i).totalQuantity();
leastFullBinIndex = i;
}

if((i == myBins.size() - 1 && lowestAmount == myBinMax)||(myBins.size() == 0))
{
myBins.add(new Bin("bin" + Integer.toString(i)));
}
}

if(quantity >= myBinMax - lowestAmount)
{
insertQuantity = myBinMax - lowestAmount;
}
else
{
insertQuantity = quantity;
}
quantity -= insertQuantity;
myBins.get(i).add(new BinItem(product.getSKU(), insertQuantity));
}
}
}

在我上次编辑之前,不会打印任何内容 - 只是一个空白控制台 - 但为了解决这个问题,我添加了以下内容(也包含在上面的代码中):

if((i == myBins.size() - 1 && lowestAmount == myBinMax)||(myBins.size() == 0))
{
myBins.add(new Bin("bin" + Integer.toString(i)));
}

现在,它不会在没有给出错误的情况下运行:

java.lang.IndexOutOfBoundsException
Index: 0, Size 0 (in java.util.ArrayList)

以及突出显示以下行:

myBins.get(i).add(new BinItem(product.getSKU(), insertQuantity));

以下是为这个庞大的程序创建的各种类的详细信息:

MusicMedia 具有三个私有(private)变量,但唯一与此相关的是通过 getSKU() 获取的字符串 mySKU

Bin 有一个私有(private)字符串 name(也是它唯一的参数),以及 BinItem 类的私有(private) ArrayList。为了从另一个类访问此 BinItems ArrayList,您可以使用 getContents()。它还具有方法totalQuantity(),该方法返回容器中已有对象的总数。

BinItem 有私有(private)变量 mySKU (String) 和 myQuantity (int) 以及方法 getSKU() 和 getQuantity(),两者都是按该顺序的参数

最佳答案

所以首先你没有垃圾箱。

您的“for” block 被跳过,因为大小为零;

所以我们到达“while”循环的最后一行,然后执行 myBins.get(i)...这是我们收到错误的地方,因为我们无法获取索引 0 处的 bin,因为我们根本没有 bin。

问题是我们在没有添加任何垃圾箱的情况下到达了这行代码...

我不确定您是否意识到,下面的行不会以 5 个垃圾箱启动您的程序。

myBins = new ArrayList<Bin>( 5 );

此代码中的 5 设置数组的内部缓冲区以容纳 5 个项目。如果我们没有提供数字,它将从 10 开始。但是这些数字只是让程序员控制初始化多少内存。

如果您的目标是从 5 个垃圾箱开始,您应该执行以下操作:

myBins = new ArrayList<Bin>( 5 );

for(int i=0; i<5; i++){
myBins.add(new myBin());
}

关于java - 获取“index : 0"and "size:0"error from ArrayList. size(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22446120/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com