我正在尝试从购物车中删除具有美元值(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);
}
输出应如下所示:
它不是删除 5.00 美元的#4,而是删除 4.00 美元的项目 #3。我不应该使用 ArrayList while 循环吗?我应该使用 for 循环吗?
我的输出是:
最佳答案
列表有两个.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/