[英]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 2
的output i get is 4 1 2
,我根據您的問題進行了糾正。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.