【问题标题】:Java ArrayList - Value, and not Item Removed from ArrayListJava ArrayList - 值,而不是从 ArrayList 中删除的项目
【发布时间】:2017-12-02 17:17:32
【问题描述】:

我正在尝试从购物车中取出价值美元的物品。例如,如果我的购物车中有 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);
}

输出应如下所示:

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

我的输出是:

【问题讨论】:

  • 不需要if/else,您只需这样做:cartItems.remove(removalRequest);
  • if (cartItems.get(y) == removalRequest) -> 在这里删除具有 4.00 的项目。您想删除 index removalRequest - 1 处的项目
  • caritem 到底是什么?,Set,Array???
  • 使用Iterator
  • 谢谢,反斜杠。关于索引的注释帮助我修复了它!有没有办法刷新arrayList?例如,如果我希望用户能够添加第二组值,我如何让程序“忘记”第一组值?

标签: java for-loop arraylist while-loop


【解决方案1】:

List 有两个.remove 方法:.remove(Object o),删除对象本身,.remove(int index),删除给定索引处的对象。这在List&lt;String&gt; 的情况下并不令人困惑:

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&lt;Integer&gt; 的情况下,它是令人困惑的。列表中的对象将始终是 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
    }

【讨论】:

    【解决方案2】:

    cartItems.remove(removalRequest);

    您有要删除的项目的索引,因此只需将其删除。哈哈。

    【讨论】:

    • 索引从零开始。您需要使用cartItems.remove(removalRequest - 1);,因为用户输入从 1 开始
    【解决方案3】:

    我试过用一个简单的例子,希望它会清楚

    public class A {
        public static void main(String[] args) {
    
            ArrayList<Integer> a =new ArrayList();
            a.add(4);
            a.add(1);
            a.add(2);
            a.add(4);
            for(int b: a)
            System.out.println(b);
        a.remove(3);
        for(int b: a)
            System.out.println(b);
        }
    }
    

    在上面的代码中,我正在删除 index 3output i get is 4 1 2 的元素,我根据您的问题进行了更正。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      相关资源
      最近更新 更多