簡體   English   中英

Java ArrayList-值,而不是從ArrayList中刪除的項目

[英]Java ArrayList - Value, and not Item Removed from ArrayList

我正在嘗試從購物車中刪除美元價值的物品。 例如,如果我的購物車中有4件物品,我希望能夠刪除物品#4,然后讓程序繼續執行其余的3件物品。 但是,在我的輸出中,您會看到盡管我請求刪除項目#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);
}

輸出應如下所示:

正確的輸出

而不是刪除$ 4,即5.00美元,而是刪除項目#3,即4.00。 我不應該使用ArrayList while循環嗎? 我應該改用for循環嗎?

我的輸出是:

我的輸出

cartItems.remove(removalRequest);

您具有要刪除的項目的索引,因此只需將其刪除。 大聲笑。

List有兩個.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)(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
    }

我嘗試使用一個簡單的示例,希望它能使您清楚

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 3處的元素, output i get is 4 1 2output i get is 4 1 2 ,我根據您的問題進行了糾正。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM