删除字符串-在线购物车

时间:2019-02-17 00:01:04

标签: java

我对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.");
                }


    }   

但是问题是没有任何东西可以清除。输出停留在那里...

1 个答案:

答案 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");

例如