0

我从事 Java/HTML 项目。我已将哈希图设置为会话属性。我从会话中请求哈希图并将键/值放入其中 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);
%>

小服务程序代码:

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")的值后,相同键的哈希映射值为'-1'。

4

1 回答 1

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被评估为假,所以调用 else 指令。你在打电话setValue(product, -1)

正如您在上面看到的,setValue 会将 -1 分配给您观察到的 asd.a。

于 2012-05-09T07:54:12.130 回答