我对stackoverflow不太熟悉,所以请客气!该部分代码的目的是: 除去项目() -从cartItems数组中删除项目。有一个字符串(项目的名称)参数。不返回任何东西。 -如果找不到商品名称,则输出此消息:购物车中找不到商品。什么都没删除。
这是我到目前为止所拥有的:
public void removeItem(String itemName){
if(count!=0)
count--;
int index=-1;
if (cartItems.length!=0) {
for(int i = 0; i<count; i++)
{
if(cartItems[i].getName().equals(itemName))
{
index=index-i;
break;
}
}}
if(index==-1)
{
System.out.println("Item not found in cart. Nothing removed.");
}
}
但是问题是没有任何东西可以清除。输出停留在那里...
答案 0 :(得分:2)
Java中的数组具有固定大小。 假设您的列表是[“ wheel”,“ engine”,“ window”],大小为3。 而您想要删除“引擎”,则会找到“引擎”的索引(此处为1) 然后将引擎后的所有内容向下移动一个位置,为您提供大小为2的[“ wheel”,“ window”,“ window”]
您将拥有一个变量(大小),该变量跟踪列表的大小,当您删除项目时,列表的大小将减一。如果有人尝试访问索引大于或等于列表大小的项目,这将使您抛出错误。
如果您想重新添加引擎,只需执行list [size] =“ engine”,然后将size变量增加1。 (例如:list [size] =“ engine”; size ++)list现在为[“ wheel”,“ window”,“ engine”],大小现在为3。
现在说您想将另一部分添加到列表中。现在大小为三,但是数组中没有更多空间可放置新项目。
当有人尝试在阵列已满时添加项目时,您将创建一个新的更大的阵列(通常是原始阵列大小的1.5倍),然后将旧阵列中的所有项目复制到其中,然后插入新的项放入此数组中,然后将旧数组替换为新的较大数组。
您可以花费时间自己实现所有这些,或者可以使用已经存在的ArrayList类,该类完全符合我的描述:
List<String> carItems = new ArrayList<>();
carItems.add("wheel");
carItems.add("engine");
carItems.add("window");
现在,当我想删除引擎时,我可以轻松完成
carItems.remove("engine");
繁荣,它消失了。
您也不必担心填充数组,因为在向其中添加新项目时它将自动扩展:
carItems.add("door");
您可以使用以下方法获取物品
carItems.get(i);
如果您对此有任何疑问,请随时提问。
(编辑) 刚刚注意到您存储的是CarItems数组,而不是字符串。在这种情况下,您可以使用数组来实现我上面所说的内容,而不是存储字符串,而是存储CarItems并使用需要删除的名称搜索CarItem,或者使用HashMap。
HashMap类似于ArrayList,只是其中的项是通过键而不是索引来寻址的。您会想要类似的东西:
Map<String, CarItem> carItems = new HashMap<>();
添加CarItem时,请执行以下操作:
carItems.put(carItem.getName(), carItem);
要删除给定名称的carItem,请执行以下操作:
carItem.remove("engine");
例如