二十一、示例-简单购物车
【超市商品】
public class Product {
private int no;
private String name;
private double price;
public Product(int no, String name, double price) {
super();
this.no = no;
this.name = name;
this.price = price;
}
public Product(){
}
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;
}
@Override
public String toString() {
return "Product [no=" + no + ", name=" + name + ", price=" + price
+ "]";
}
//超市商品编号的格式[1000-9999]
@Override
public int hashCode() {
return no/1000;
}
@Override
public boolean equals(Object obj) {
if(this==obj){
return true;
}
if(obj instanceof Product){
Product p=(Product)obj;
if(p.name.equals(this.name)&&p.no==this.no){
return true;
}
}
return false;
}
}
【购物车】
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class ShoppingCart {
//使用Map储存商品条目,Map中当key重复的时候,value采用的是覆盖
Map<Product, Integer> productMaps;
//总价:
double totalPrice;
ShoppingCart(){
productMaps=new HashMap<Product, Integer>();
}
//添加一个商品
public void add(Product p){
add(p,1);
}
//添加多个商品
public void add(Product 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);
}
//修改总价
totalPrice=p.getPrice()*n+totalPrice;
}
//删除一个商品
public void remove(Product p){
remove(p,1);
}
//删除多个商品
public void remove(Product p,int n){
//添加商品之前的数量:
int before=productMaps.get(p).intValue();
//如果购物车中的某商品的数量和n是相等的,必须删除整个条目
if(before==n){
productMaps.remove(p);
}else{
//车中有该商品
n=before-n;
productMaps.put(p, n);//key重复Value覆盖
}
//修改总价
totalPrice=p.getPrice()*n+totalPrice;
}
//情况购物车
public void clear(){
productMaps.clear();
}
public void print(){
StringBuffer sb=new StringBuffer();
sb.append("购物车详单:\n");
//遍历Map
Set<Product> keysProducts=productMaps.keySet();
Iterator<Product> it=keysProducts.iterator();
while(it.hasNext()){
Product k= it.next();
Integer vInteger=productMaps.get(k);
sb.append("\t"+"购买的数量"+vInteger.intValue()+"\t"+k+"\t"+(vInteger.intValue()*k.getPrice())+"\n");
}
sb.append("\t\t\t\t总价:"+totalPrice+"元");
System.out.println(sb);
}
}
【测试类】
public class Test {
public static void main(String[] args) {
//创建购物车:
ShoppingCart cart=new ShoppingCart();
//货车:
Product p1=new Product(1000,"苹果",10.0);
Product p2=new Product(2000,"橘子",3.0);
Product p3=new Product(3000,"火龙果",10.0);
Product p4=new Product(4000,"柚子",10.0);
//开始购物
cart.add(p1);
cart.add(p1,3);
cart.add(p2,1);
cart.add(p3,2);
cart.add(p4,4);
cart.remove(p1);
cart.remove(p1,2);
//打印详单
cart.print();
}
}

浙公网安备 33010602011771号