Session 从会话请求后更改了Hashmap值
我从事Java/HTML项目。我已经将hashmap设置为会话属性。我从会话请求hashmap,并将key/value放入其中Session 从会话请求后更改了Hashmap值,session,jakarta-ee,hashmap,Session,Jakarta Ee,Hashmap,我从事Java/HTML项目。我已经将hashmap设置为会话属性。我从会话请求hashmap,并将key/value放入其中 map.put(“一些字符串”,“1”) . 当第二次执行此操作时,我打印hashmap内容,唯一的值,即hashmap上最后一次操作后的“1”变为“-1” 在我看来,Hashmap是这个项目最好的数据结构。有人能帮忙吗 public class Cart { private HashMap<String, asd> list; publi
map.put(“一些字符串”,“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;
}
}
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);
}
在我为相同的
(String)request.getSession().getAttribute(“name”)
第二次调用alterProduct
后,相同键的hashmap值为“-1”。产品的类型/值是什么?它是如何连接到“购物车”的
我猜会发生什么,你弄乱了数据类型。另一个选项是您在Cart.toString()方法中有bug。我建议您将代码更改为“普通”数据类型并重新检查。如果失败,请使用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,“某物”)
时会发生什么。
list.containsKey(产品)
为真(您使用相同的产品),代码为-1
if(code==-1)plusOne(产品);
按预期执行
但是你有点奇怪
if(code==0)删除(产品);
else设置值(产品、代码);
code==0
的计算结果为false,因此调用else指令。您正在调用setValue(product,-1)
如上所示,setValue将为您观察到的asd.a分配-1。产品是字符串。Cart是一个初始化map
的类。我将HashMap
更改为HashMap
类MyClass{int a;}
成功了。你能提供完整的代码吗?你如何创建\检索地图,如何填充地图?(facepalm)对我的问题感到尴尬
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);
}