//Mercha.java
public class Mercha {
private String comname ;//商品名称
private String comprice ;//商品价格
private String comnum ; //商品数量
//名称
public void setComname(String comname){
this.comname=comname;
}
public String getComname() {
return comname;
}
//价格
public void setComprice (String comprice){
this.comprice=comprice;
}
public String getComprice (){
return comprice ;
}
//商品数量
public void setComnum(String comnum){
this.comnum=comnum;
}
public String getComnum(){
return comnum;
}
}
//商品类
//Commoditystatic Map<Object, Object> commodity = new HashMap<Object, Object>();// 储存商品// ////添加数据
Mercha mer1 = new Mercha();
mer1.setComname("海尔");
mer1.setComprice("120.0");
mer1.setComnum("100"); // ////数据
Mercha mer2 = new Mercha();
mer2.setComname("大中");
mer2.setComprice("150.0");
mer2.setComnum("120"); // /////////数据
Mercha mer3 = new Mercha();
mer3.setComname("长虹");
mer3.setComprice("190.0");
mer3.setComnum("135"); commodity.put(mer1, mer1);
commodity.put(mer2, mer2);
commodity.put(mer3, mer3); // 输出
do {
Mercha mer5 = new Mercha();// 用于将处理后的商品信息转交至支付中心的Map<>.
System.out.println(">>>>>>>>>>>>商品处理中心"); System.out.println("商品名称" + "\t\t" + "商品数量" + "\t\t" + "商品价格"); for (Object obj : commodity.keySet()) {
System.out.println(((Mercha) commodity.get(obj)).getComname()
+ "\t\t" + ((Mercha) commodity.get(obj)).getComnum()
+ "\t\t" + ((Mercha) commodity.get(obj)).getComprice());
}
//commodity.clear();// 输出之后,清空map<>,防止重复添加
for (Map.Entry<Object, Object> entry : commodity.entrySet()) { // mer5.getComname()
commodiname = ((Mercha) entry.getKey()).getComname();// 商品名称
commodinum = mer4.getComnum();// 购买的数量<控制台输入>
commodiprice = ((Mercha) entry.getValue()).getComprice();// 商品价格
// 处理商品数量过程
String commodinums = ((Mercha) entry.getValue())
.getComnum();// 商品总数量<已定义>
commodinums_always = Integer.valueOf(commodinums)
.intValue();// 获得商品总数量<String转int>
commodinums_buy = Integer.valueOf(commodinum).intValue();// 购买数量<String转换为int>
commodinums_results = commodinums_always - commodinums_buy;// 获得已经售出后的商品数量<int>
commodinums_resultss = Integer
.toString(commodinums_results);// 将int转为String.
// 处理数量过程结束
if (mer4.getComname().equals(commodiname)
&& commodinums_buy <= commodinums_always
&& commodinums_buy > t.Minnum) {// 值比较:查找是否有相应商品,并且数量是否大于所要购买的数量
// 用一个对象接收上面的值.然后再将对象传入支付类中的map
mer5.setComname(commodiname);// 1.用对象存储名称
mer5.setComnum(commodinum);// 2.存储价格
mer5.setComprice(commodiprice);// 3.存储购买数量<控制台输入的值>
pay.pays.put(mer5, mer5);// 将上述信息放入支付类的map<>. System.out.println("购买成功!");
mer6.setComname(commodiname);// 1.用对象存储名称
mer6.setComprice(commodiprice);// 2.存储价格
mer6.setComnum(commodinums_resultss);// 3.存储数量<已变化> findname = true;// 找到商品,findname为真
}
}
假如要修改mer2的商品数量(因为购买后要减去相应数量再输出.[不能在迭代的时候修改数据]),如何先去掉mer2,然后在添加最新的mer6到map.求教高人,谢谢了、
public class Mercha {
private String comname ;//商品名称
private String comprice ;//商品价格
private String comnum ; //商品数量
//名称
public void setComname(String comname){
this.comname=comname;
}
public String getComname() {
return comname;
}
//价格
public void setComprice (String comprice){
this.comprice=comprice;
}
public String getComprice (){
return comprice ;
}
//商品数量
public void setComnum(String comnum){
this.comnum=comnum;
}
public String getComnum(){
return comnum;
}
}
//商品类
//Commoditystatic Map<Object, Object> commodity = new HashMap<Object, Object>();// 储存商品// ////添加数据
Mercha mer1 = new Mercha();
mer1.setComname("海尔");
mer1.setComprice("120.0");
mer1.setComnum("100"); // ////数据
Mercha mer2 = new Mercha();
mer2.setComname("大中");
mer2.setComprice("150.0");
mer2.setComnum("120"); // /////////数据
Mercha mer3 = new Mercha();
mer3.setComname("长虹");
mer3.setComprice("190.0");
mer3.setComnum("135"); commodity.put(mer1, mer1);
commodity.put(mer2, mer2);
commodity.put(mer3, mer3); // 输出
do {
Mercha mer5 = new Mercha();// 用于将处理后的商品信息转交至支付中心的Map<>.
System.out.println(">>>>>>>>>>>>商品处理中心"); System.out.println("商品名称" + "\t\t" + "商品数量" + "\t\t" + "商品价格"); for (Object obj : commodity.keySet()) {
System.out.println(((Mercha) commodity.get(obj)).getComname()
+ "\t\t" + ((Mercha) commodity.get(obj)).getComnum()
+ "\t\t" + ((Mercha) commodity.get(obj)).getComprice());
}
//commodity.clear();// 输出之后,清空map<>,防止重复添加
for (Map.Entry<Object, Object> entry : commodity.entrySet()) { // mer5.getComname()
commodiname = ((Mercha) entry.getKey()).getComname();// 商品名称
commodinum = mer4.getComnum();// 购买的数量<控制台输入>
commodiprice = ((Mercha) entry.getValue()).getComprice();// 商品价格
// 处理商品数量过程
String commodinums = ((Mercha) entry.getValue())
.getComnum();// 商品总数量<已定义>
commodinums_always = Integer.valueOf(commodinums)
.intValue();// 获得商品总数量<String转int>
commodinums_buy = Integer.valueOf(commodinum).intValue();// 购买数量<String转换为int>
commodinums_results = commodinums_always - commodinums_buy;// 获得已经售出后的商品数量<int>
commodinums_resultss = Integer
.toString(commodinums_results);// 将int转为String.
// 处理数量过程结束
if (mer4.getComname().equals(commodiname)
&& commodinums_buy <= commodinums_always
&& commodinums_buy > t.Minnum) {// 值比较:查找是否有相应商品,并且数量是否大于所要购买的数量
// 用一个对象接收上面的值.然后再将对象传入支付类中的map
mer5.setComname(commodiname);// 1.用对象存储名称
mer5.setComnum(commodinum);// 2.存储价格
mer5.setComprice(commodiprice);// 3.存储购买数量<控制台输入的值>
pay.pays.put(mer5, mer5);// 将上述信息放入支付类的map<>. System.out.println("购买成功!");
mer6.setComname(commodiname);// 1.用对象存储名称
mer6.setComprice(commodiprice);// 2.存储价格
mer6.setComnum(commodinums_resultss);// 3.存储数量<已变化> findname = true;// 找到商品,findname为真
}
}
假如要修改mer2的商品数量(因为购买后要减去相应数量再输出.[不能在迭代的时候修改数据]),如何先去掉mer2,然后在添加最新的mer6到map.求教高人,谢谢了、
解决方案 »
- 垃圾回收问题
- 书上的一个基础知识点不懂
- 谁用过jtest 做单元测试啊?
- 本人刚学SOFTWARE WORKSHOP,上了几个星期GROOVY,现在刚开始接触JAVA,有几个问题,有高人能帮忙看看
- 请问一个内部类的问题
- 关于socket通信的问题,客户端发完一个请求,得到相应的回应后,再发另外一个请求时,结果服务器端读不到
- static { } 这种结构这表示什么意思呢??
- 请在http://expert.csdn.net/Expert/topic/1266/1266042.xml?temp=.5106623上有帮助的近来领分!记住,有没有长点的原代码?
- 100fen关于paint(Graphics,g)函数!!问题
- 初学者问:关键词throws的用法及意义,答必得分
- java既然有了互斥锁了,那么读写锁似乎有点重复啊
- 用MYECLIPSE怎么连接MYSQL数据库?
最好在这个类里,至少实现了equals、否则可能删不掉。(尽可能也实现hashCode方法)
还有定义时最好写成 Map<Mercha , Mercha >参考:
map的remove。
V remove(Object key)如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。更确切地讲,如果此映射包含从满足 (key==null ? k==null :key.equals(k)) 的键 k 到值 v 的映射关系,则移除该映射关系。(该映射最多只能包含一个这样的映射关系。)
返回此映射中以前关联该键的值,如果此映射不包含该键的映射关系,则返回 null。 如果此映射允许 null 值,则返回 null 值并不一定 表示该映射不包含该键的映射关系;也可能该映射将该键显示地映射到 null。 调用返回后,此映射将不再包含指定键的映射关系。
参数:
key - 从映射中移除其映射关系的键
返回:
以前与 key 关联的值;如果没有 key 的映射关系,则返回 null。
抛出:
UnsupportedOperationException - 如果此映射不支持 remove 操作
ClassCastException - 如果该键对于此映射是不合适的类型(可选)
NullPointerException - 如果指定键为 null 并且此映射不允许 null 键(可选)
hashcode方法用来得到 该对象存放在hash表的位置。
equals方法用来 找你需要找的对象。不重写这个方法就会导致找不到对象,所以map.remove的时候 删不掉。若对象里有某个字段 比如Id 来标识对象是惟一的,那么就用这个id来作为map的key,对象作为value。这样是最好的。这样就不用重写equals和hashcode方法,因为像String类 Long类 已经帮你实现了,可以去看看这些类的源码,能找到的。
先把static Map<Object, Object> commodity = new HashMap<Object, Object>();的泛型去掉。
改成static Map<String, Mercha> commodity = new HashMap<String, Mercha>();
package deletehashmap;public class Mercha { private String comname;// 商品名称
private String comprice;// 商品价格
private String comnum; // 商品数量 // 名称 public void setComname(String comname) {
this.comname = comname;
} public String getComname() {
return comname;
} // 价格 public void setComprice(String comprice) {
this.comprice = comprice;
} public String getComprice() {
return comprice;
} // 商品数量 public void setComnum(String comnum) {
this.comnum = comnum;
} public String getComnum() {
return comnum;
} @Override
public String toString() {
return "Mercha [comname=" + comname + ", comprice=" + comprice
+ ", comnum=" + comnum + "]";
}
}package deletehashmap;import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;/**
* @author Yanhua.Chen
* @time 2012-8-27
*/
public class Sell {
static Map<String, Mercha> commodity = new HashMap<String, Mercha>();// 储存商品 // ////添加数据
public void add() {
Mercha mer1 = new Mercha();
mer1.setComname("海尔");
mer1.setComprice("120.0");
mer1.setComnum("100"); // ////数据
Mercha mer2 = new Mercha();
mer2.setComname("大中");
mer2.setComprice("150.0");
mer2.setComnum("120"); // /////////数据
Mercha mer3 = new Mercha();
mer3.setComname("长虹");
mer3.setComprice("190.0");
mer3.setComnum("135"); commodity.put(mer1.getComname(), mer1);
commodity.put(mer2.getComname(), mer2);
commodity.put(mer3.getComname(), mer3);
} // 输出所有商品信息
public void outputAll() {
Collection<Mercha> merchas = commodity.values();
Iterator<Mercha> iter = merchas.iterator();
while (iter.hasNext()){
System.out.println(iter.next().toString());
}
}
/**
* @param num 卖出商品数量
* @param name 卖出商品名称
* @return 卖出商品的总金额, -1表示商品不存在, -2表示商品数量不足
*/
public double sell(int num, String name){
double money = 0;
if (!commodity.containsKey(name)) //商品不存在
return -1;
Mercha mercha = commodity.get(name); //获取商品信息
int stornum = Integer.parseInt(mercha.getComnum());
if (stornum < num) //商品数量不足
return -2;
mercha.setComnum("" + (stornum - num));
money = num * Double.parseDouble(mercha.getComprice());
return money;
}
/**
* @return 该商品的对象, 不存在返回null
*/
public Mercha remove(String name){
return commodity.remove(name);
}
public static void main(String args[]){
Sell sell = new Sell();
sell.add();
System.out.println("卖前商品情况:");
sell.outputAll();
sell.sell(10, "大中");
System.out.println("卖后商品情况:");
sell.outputAll();
}
}运行结果卖前商品情况:
Mercha [comname=大中, comprice=150.0, comnum=120]
Mercha [comname=海尔, comprice=120.0, comnum=100]
Mercha [comname=长虹, comprice=190.0, comnum=135]
卖后商品情况:
Mercha [comname=大中, comprice=150.0, comnum=110]
Mercha [comname=海尔, comprice=120.0, comnum=100]
Mercha [comname=长虹, comprice=190.0, comnum=135]