java - 移除绳子 - 在线购物车

标签 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.");
                }


    }   

但问题是没有任何东西被删除。输出保留在那里...

最佳答案

Java 中的数组具有固定大小。 假设您的列表是 ["wheel", "engine", "window"],尺寸为 3。 如果你想删除“engine”,你会找到“engine”的索引(这里是1) 然后将引擎后的所有内容移至一处,得到: ["wheel", "window", "window"],尺寸为 2

您将有一个变量(大小)来跟踪列表的大小,当您删除项目时,该大小将减一。如果有人尝试访问索引大于或等于列表大小的项目,这将允许您抛出错误。

如果您想再次添加引擎,只需执行 list[size] = "engine",然后将 size 变量增加 1。 (例如:list[size] = "engine"; size++)列表现在为 ["wheel", "window", "engine"],大小现在为 3。

现在假设您想将另一个部分添加到列表中。现在大小为 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 数组,而不是字符串。在这种情况下,您可以使用数组实现我上面所说的内容,但不是存储字符串,而是存储 CarItem 并搜索具有需要删除的名称的 CarItem,或者使用 HashMap。

HashMap 就像一个 ArrayList,只不过其中的项是通过键而不是索引来寻址的。你会想要这样的东西:


Map<String, CarItem> carItems = new HashMap<>();


当您添加 CarItem 时,请执行以下操作:


carItems.put(carItem.getName(), carItem);

要删除指定名称的 carItem,请执行以下操作:


carItem.remove("engine");

例如

关于java - 移除绳子 - 在线购物车,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54728868/

相关文章:

java - feed方法java if语句

java - 无法从 list<object> 转换为 list<callable<type>> java

java - 使用 getDrawable 配置 TabHost

java - 使用 JSTL 在 jsp 页面中显示货币代码(美元等) - 取决于区域设置

java - 如何覆盖 Bouncy CaSTLe X500Name 中的 CN?

java - 如何将自定义操作栏布局与 AndroidAnnotations 结合使用?

java - 如何显示某个类的所有可用方法(java)

没有 MidiMessage 的 Java MIDI

尝试连接到 Oracle 数据库时出现 java.sql.SQLException

java - 从 FlatFileItemReader LineMapper 访问平面文件的名称