Java ArrayList - 值,而不是从 ArrayList 中删除的项目

标签 java for-loop arraylist while-loop

我正在尝试从购物车中删除具有美元值(value)的商品。例如,如果我的购物车中有 4 件商品,我希望能够删除第 4 件商品,然后让程序继续处理剩余的三件商品。但是,在我的输出中,您会看到,虽然我请求删除项目 #4,但它会删除值为 4 的项目(如 $4.00),但不会删除项目 #4。

System.out.print("Would you like to delete an item - y/n: ");
String deleteResponse = textReader.nextLine();
while ((!deleteResponse.equalsIgnoreCase("y")) && (!deleteResponse.equalsIgnoreCase("n")))
{
    System.out.print("Sorry - we need a y/n: ");
    deleteResponse = textReader.nextLine();
}

if ((deleteResponse.equalsIgnoreCase("y")))
{
    System.out.println();
    System.out.print("Provide an item to delete: #");
    int removalRequest = numberReader.nextInt();
    while (removalRequest > cartItems.size())
    {
        System.out.print("That number is out of range - try again:# ");
        removalRequest = numberReader.nextInt();
    }
    int y = 0;
    while (y < cartItems.size())
    {
        if (cartItems.get(y) == removalRequest)
        {
            cartItems.remove(y);
        }
        else
        {
            y++;
        }
    }
    System.out.println("\nItem #" + removalRequest + " has been removed.");
}
else
{
    System.out.println();
    System.out.println("Thanks - no items will be deleted.");
}
System.out.println("\n********** Here is your final list of items **********");
System.out.println();

for (counter = 0; counter < cartItems.size(); counter++)
{
    System.out.println("Item #" + (counter + 1) + ": " + dollarFormatter.format(cartItems.get(counter)));
}
// find subtotal
double subtotal = 0;
for (int i = 0; i < cartItems.size(); i++)
{
    subtotal += cartItems.get(i);
}

输出应如下所示:

Correct Output

它不是删除 5.00 美元的#4,而是删除 4.00 美元的项目 #3。我不应该使用 ArrayList while 循环吗?我应该使用 for 循环吗?

我的输出是:

My output

最佳答案

列表有两个.remove方法:.remove(Object o) ,它会删除对象本身,并且 .remove(int index)它删除给定索引处的对象。对于 List<String> 来说,这并不令人困惑。 :

List<String> names = new ArrayList<>();
names.add("Nate");
names.add("Sunmi");
names.add("Tony");
for (String name : names) {
    System.out.println(name); // Sunmi, Nate, Tony
}
System.out.println("-------");
names.remove("Nate");
for (String name : names) {
    System.out.println(name); // Sunmi, Tony
}
System.out.println("-------");
names.remove(0);
for (String name : names) {
    System.out.println(name); // Tony
}

但是,在 List<Integer> 的情况下这很令人困惑。列表中的对象将始终是 Integer对象,因此要删除特定索引处的元素,您需要将其转换为 (Integer)(int)取决于您是否要删除元素或索引处的元素:

    List<Integer> numbers = new ArrayList<>();
    numbers.add(1);
    numbers.add(21);
    numbers.add(35);
    for (Integer name : numbers) {
        System.out.println(name); // 1, 21, 35
    }
    System.out.println("-------");
    numbers.remove((Integer) 21);
    for (Integer name : numbers) {
        System.out.println(name); // 1, 35
    }
    System.out.println("-------");
    numbers.remove((int) 0);
    for (Integer name : numbers) {
        System.out.println(name); // 35
    }

关于Java ArrayList - 值,而不是从 ArrayList 中删除的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47610466/

相关文章:

java - 即使重新启动后也保持服务始终运行

java - 如何在 Java 1.4 中向 XML 节点添加属性

java - 以编程方式分析java堆转储文件

r - 如何构建一个循环数据帧并转换其中数据的函数 (R)

java - 并发数组列表

java - 使用 Java 进行系统事件处理

c - 在一行中使字符串为空

javascript - 使用 splice 和 for 循环删除原始数组

java - 如何在java中使用扫描仪处理奇怪的输入

java - Range 类的这种实现有什么问题