我正在尝试制作一个列表,我将在其中将商品添加到我的购物车中,然后在结账时它会使用 HashMap 显示商品出现的次数。
public class ShoppingCart
{
private ArrayList<Items> ShoppingCart;
public ShoppingCart()
{
ShoppingCart = new ArrayList<Items>();
}
public void addItems(Items newItems)
{
ShoppingCart.add(newItems);
}
public ArrayList<Items> getShoppingCart()
{
return ShoppingCart;
}
public void CheckOut()
{
for(int i = 0; i < ShoppingCart.size(); i++)
{
HashMap<String, Integer> itemsMap = new HashMap<String, Integer>();
int a = 1;
if (itemsMap.containsKey(ShoppingCart.get(i).getName()))
{
itemsMap.replace(ShoppingCart.get(i).getName(), a, a++);
}
else
{
itemsMap.put(ShoppingCart.get(i).getName(), a);
}
System.out.println(a +"x "+ShoppingCart.get(i));
}
}
我的项目是用
创建的public class Items
{
private String name;
public Items (String name)
{
this.name = name;
}
public String toString()
{
return name;
}
public String getName()
{
return name;
}
}
在 Main 中,我会创建项目,并将它们添加到购物车,然后是 ShoppingCart.CheckOut();我的元素。
但是,如果我像这样添加 4 个“白面包”,
Items bread = new Items("White Bread");
ShoppingCart ShoppingCart = new ShoppingCart();
ShoppingCart.addItems(bread);
ShoppingCart.addItems(bread);
ShoppingCart.addItems(bread);
ShoppingCart.addItems(bread);
我明白了
1x White Bread
1x White Bread
1x White Bread
1x White Bread
代替
4x White Bread
我做错了什么?
最佳答案
改变
itemsMap.replace(ShoppingCart.get(i).getName(), a, a++);
到
a = itemsMap.get(ShoppingCart.get(i).getName()); // in order to increment the
// current counter value
itemsMap.replace(ShoppingCart.get(i).getName(), a, ++a);
使用后递减 (a++
) 不会修改 Map 中的值,因为 a++
返回 a
的原始值。
此外,HashMap
应该在循环外初始化。否则它将始终只包含一个元素。
关于java - 计算列表中元素的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35019859/