我从事Java / HTML项目。我已将hashmap设置为会话属性。我从会话请求hashmap并将key / value放入其中
map.put("some string", "1")
。当第二次执行此操作时,我打印了hashmap内容,并且唯一的值(在hashmap上的最后一个操作之后为'1')变为'-1'。
在我看来,Hashmap是这个项目的最佳数据结构。有人可以帮忙吗?
public class Cart {
private HashMap<String, asd> list;
public Cart(){
list = new HashMap<String, asd>();
}
public HashMap<String, asd> getMap(){
return list;
}
/*
* Parameter: code
* -1: increase quantity by 1
* 0: delete product from the product list
* else: set the product quantity to the passed value
*/
public void alterProduct(int code, String product){
if(list.containsKey(product)) {
if(code == -1) plusOne(product);
if(code == 0) remove(product);
else setValue(product, code);
}else {
asd asd = new asd();
asd.a = 1;
list.put(product, asd);
}
}
private void plusOne(String product){
asd asd = list.get(product);
asd.a = asd.a + 1;
list.put(product, asd);
}
private void remove(String product){
list.remove(product);
}
private void setValue(String product, int code){
asd asd = new asd();
asd.a = code;
list.put(product, asd);
}
}
class asd{
int a;
public String toString(){
return ""+a;
}
}
我将Cart
对象设置为会话属性的JSP代码:
<%
Cart myCart = new Cart();
session.setAttribute("cart",myCart);
%>
Servlet代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
Cart cart = (Cart) request.getSession().getAttribute("cart");
cart.alterProduct(-1, (String) request.getSession().getAttribute("name"));
doGet(request, response);
}
我第二次为同一个alterProduct
调用(String) request.getSession().getAttribute("name")
后,同一个键的hashmap值为'-1'。
答案 0 :(得分:1)
什么是产品的类型/价值?它是如何连接到“购物车”的?
我猜你搞乱了数据类型会发生什么。另一种选择是你在Cart.toString()
方法中有错误。我建议你用“普通”数据类型更改代码并重新检查它。如果失败,请使用Cart类而不进行混乱转换并调试代码。
你有错误:
public void alterProduct(int code, String product){
if(list.containsKey(product)) {
if(code == -1) plusOne(product);
if(code == 0) remove(product);
else setValue(product, code);
}
private void setValue(String product, int code){
asd asd = new asd();
asd.a = code;
list.put(product, asd);
}
考虑第二次致电art.alterProduct(-1, "something")
时会发生什么。
list.containsKey(product)
为真(您使用相同的产品“),代码为-1。所以
if(code == -1) plusOne(product);
按预期执行。
但是你有一些需要的东西
if(code == 0) remove(product);
else setValue(product, code);
code ==0
被评估为false,因此 else指令被称为。您正在呼叫setValue(product, -1)
如上所示,setValue会将-1分配给您观察到的asd.a.