java ee问题,我用map.remove()方法不能删除元素

/**
* 清空所有条目
*/
public void clear() {
map.clear();
}

上面这个清空功能可以,但是下面这个删除元素就不行。我确定map.remove(bid)已经执行了,控制台下面都打印了要删除商品的 id,但是不知道为什么这个功能没有执行。添加,清空都可以,就删除不行。

这是整个项目的网盘地址:http://pan.baidu.com/s/1gdm00EJ
连数据库表的创建语句都有了,改下密码就行了,
帮我看看是什么问题
这是我改后的图:

大致看了下目前的情况,我估计你大概没理解MAP的数据结构,map是一种以key value形式保存数据的结构,你用的remove方法接收的参数是指map的key值,我怀疑你的这个bid并不是map的key值,而是value值,理由就是map.containsKey(bid);这句话的结果是false,所以你不能直接调用remove方法删除,只能遍历map比较value值:
Iterator it = map.keySet().iterator();
if(it.hasNext()){
Object o = it.next();
if(bid.equals(o)){
it.remove();
}
}
这样应该可以了,不过这不是最好的办法,你应该去看看数据进入map的时候是如何保存的,调用这个delete方法的时候应该传过来的是这个map当时存放的key,这样才比较高效追问

报错了,我把错误写在后面的注释上了,怎么改?

如果不全,我上面有我代码的网盘地址,帮看看,谢谢

追答

你报什么错贴出来看看,我估计是没导包,你试试快捷键ctrl+shift+o

追问

包的错就是我后面的注释,类型不匹配。

还有我像添加方法那样写删除会报错:map.remove(cartItem.getBook().getBid());


追答

空指针异常,要么map为空,要么cartItem为空,要么cartItem.getBook()为空

追问

应该怎么改?
还有,我按照你上面的写法,报错了,错误信息就写在代码旁边的注释

追答

要不你私信我你的联系方式吧,这样百度说的好郁闷,我远程帮你看看,这种问题应该很简单的

追问

已经私信了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-06-18
"但是不知道为什么这个功能没有执行"具体指什么? 是执行后map中还存在key为1的商品?
System.out.println(map.size()); // 打印删除前的个数。
System.out.println(map.get(bid)); // 打印为bid的商品,如果为null,说明商品不存在。
map.remove(bid);
System.out.println(map.size()); // 打印删除后的个数.追问

这种打印情况该怎么改呢?bid存在是1,但是删不掉

追答

晕死,是不是里面的1是int型,不是String类型?
map.remove(1); 而不是map.remove("1");

如果你确定map中有为1的商品的话,只能说明1的类型不匹配。
1是int型;“1”是String类型,在这两者并不相等。
你把放到map中的代码贴上来。
或者你试试 map.remove(1);

追问

这是点击添加后控制台的信息,没问题:

这是点击“删除”后控制台信息,就算加上map.remove(1)也删不掉:

这是删除按钮的jsp传递参数:


而且上面还有我的全部代码的网盘地址,请指教

追答

book.bid确定是String类型?不是Int类型?

在add方法打印出 bid。 System.out.println("放入map中的key="+carItem.getBook().getBid());

//在删除方法中打印bid
System.out.println("删除时的key="+bid);
// 打印map中的key。
for(Map.Entry entry : map.entrySet()){
System.out.println(entry.key());
}

追问

按照上面的方法,控制台打印,蓝色部分是点击删除时的信息

如果我按照添加方法那样写删除:map.remove(cartItem.getBook().getBid());

会报错:

第2个回答  2015-06-18
你在remove前把map的key都打出来,remove后再打一遍出来 对比追问

对比什么?都打印过了,要删除的商品id都是 1 +我后面自定义的字符串

追答

那要看map里的值是怎么样的啊,是否存在或相等,还可以进一步,把map里的key都拿来和bid equals 一下看看是否相等 不检查清楚怎么知道问题所在

还可以试一下 map.containsKey(bid )

追问

这种打印情况该怎么改呢?bid存在是1,但是删不掉

追答

这样可以看出来,map里有一个,这个的key不是bid啊
你打出map的key来:map.keySet().iterator().next() 打印出这个
然后想想你put到map的时候是怎么写的吧

追问

这是添加方法

这是删除方法

看控制台的信息,填加的时候有个是特别长的bid


如果我按添加方法那样写删除,会出错:map.remove(cartItem.getBook().getBid());


报错

第3个回答  2015-06-18
你确定你添加了bid?
第4个回答  2015-06-18
说明map中不存在此对象。。。。。。。。。。。追问

清空都能清掉了,怎么不存在

相似回答