总的来说在做这个购物车的小项目的时候:发现了好多的问题。用了javase 的相关的知识,特别是集合方面的东西Map
以及Integer 自动装箱,自动拆箱 Integer.intVlaue; equals等方法
购物车
package ShoppingCar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class ShoppingCar {
//购物车
double totalprice;
//使用map存储商品条目
Map<ShoppingCenter,Integer> ProductMaps;
ShoppingCar(){
ProductMaps = new HashMap<ShoppingCenter,Integer>();
}
//添加一个商品
public void add(ShoppingCenter p) {
add(p,1);
}
//添加n个商品
public void add(ShoppingCenter p,int n) {
//判断是否有该商品
if(!ProductMaps.containsKey(p)) {
ProductMaps.put(p, n);//自动装箱
}else {
//有 //会有自动拆箱
int before = ProductMaps.get(p).intValue();//之前的商品数
int after = before+n;
ProductMaps.put(p,after);//key重复,Value覆盖
}
totalprice += p.getPrice()*n;
}
//删除一个
public void remove(ShoppingCenter p) {
remove(p,1);
}
//删除n个
public void remove(ShoppingCenter p,int n) {
//如果某商品的数量和删除的个数相等,删除该条目
int before = ProductMaps.get(p).intValue();//之前的商品数
if(before==n) {
ProductMaps.remove(p);
}else {
int after = before-n;
ProductMaps.put(p,after);
}
totalprice -= p.getPrice()*n;}
//清空购物车
public void clear() {
ProductMaps.clear();
totalprice = 0.0;
}
//输出购物车清单
public void print() {
StringBuffer sb = new StringBuffer();
sb.append("购物清单:\n");
Set<ShoppingCenter> keys = ProductMaps.keySet();
Iterator<ShoppingCenter> it = keys.iterator();
while(it.hasNext()) {
ShoppingCenter k = it.next();
Integer v = ProductMaps.get(k);
sb.append("\t"+v.intValue()+"\t"+k+"\t"+v.intValue()*k.getPrice()+"\n");
}
sb.append("\t\t\t总价:"+totalprice);
System.out.println(sb);
}
}
超市商品
package ShoppingCar;
public class ShoppingCenter {
private int no;//编号
private String name;
private double price;
public ShoppingCenter(){}
public ShoppingCenter(int no, String name, double price) {
this.no = no;
this.name = name;
this.price = price;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String toString() {
return "商品 [编号: " + no + " 名字: " + name + " 价格: " + price + "元]";
}
//equals 如果商品名字和编号都一样表示同一个商品
public boolean equals(Object o) {
if(this==o)return true;
if(o instanceof ShoppingCenter) {
ShoppingCenter p = (ShoppingCenter)o;
if(p.no==this.no&&p.name.equals(this.name)) {
return true;
}
}
return false;
}
//所有商品格式,:: [1000-9999]编号范围
public int hashCode() {
return no/10;
}
}
测试
package ShoppingCar;
public class Test {
public static void main(String[] args) {
ShoppingCar car = new ShoppingCar();
//开始购物
ShoppingCenter p1 = new ShoppingCenter(1000,"西瓜",100.0);
ShoppingCenter p2 = new ShoppingCenter(2000,"妮子",120.0);
ShoppingCenter p3 = new ShoppingCenter(3000,"弟弟",1.0);
ShoppingCenter p4 = new ShoppingCenter(4000,"思思",30.0);
car.add(p1);
car.add(p4,8);
car.add(p2,3);
car.add(p1,3);
car.remove(p1,2);
//car.clear();
car.print();
}
}