用HashSet模拟一个网上购物车

具体题目:用HashSet模拟一个网上购物车。要求:从键盘输入5个商品的编号、名称、单价、购买数量,将这些信息存入一个HashSet,(如果编号相同,则可以在数量上加1,不能重复存入购物车)然后将该HashSet作为参数调用方法getSum(HashSet items),该方法用于计算商品的总价并返回。

import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;

public class Testa {
	/*getSum方法 获得总额*/
	public static double getSum(HashSet <Goods> goods) {
		double sum=0;
		double unitprice=0;
		int quantity=0;
		
		/*添加迭代器 获取每一个商品*/
		Iterator<Goods> it=goods.iterator();
		
		while(it.hasNext()) {
			
			Goods x=new Goods();
			x=it.next();
			/*获取总额 商品单价*数量*/
			sum+=(x.unitprice*x.quantity);
		}
		return sum;
	}
	
	public static void main(String[]ags) {
		
		HashSet<Goods> gds=new HashSet<Goods>();
		
		Scanner sc=new Scanner(System.in);
		int i=0;
	
		/*for循环 获得每一个商品对应的信息*/
		for(i=0;i<5;i++) {
			Goods goods=new Goods();
			System.out.println("请输入商品的编号");
			goods.number=sc.next();
			System.out.println("请输入商品的名字");
			goods.name=sc.next();
			System.out.println("请输入商品的单价");
			goods.unitprice=sc.nextDouble();
			System.out.println("请输入商品的数量");
			goods.quantity=sc.nextInt();
			gds.add(goods);
			
}
		
		/*打印总额*/
		System.out.println("您一共消费了"+getSum(gds)+"元!");
		
		
		}
		
		
		
		
	}
	



class Goods{
	 String number;
	 String name;
	 double unitprice;
	 int quantity;

	//重写hashCode方法
	public int hashCode() {
		return number.hashCode();
	}
	
	//重写equals方法
	public boolean equals(Object obj) {
		if(this==obj)
			return true;
		if(!(obj instanceof Goods)) {
			return false;
		}
		Goods goods=(Goods) obj;
		boolean b=this.number.equals(goods.number);
		/*如果相同 那么数量+1*/
		if(b) {
			goods.quantity++;
		}
		return b;
	}
	
	
	
}


关于本题我的理解:对于本题首先先要定义商品类,把对应的属性都定义好,然后重写hashcode和equals方法,用来避免同一种商品进入购物车,要注意的是在equals方法中,当是同一种商品的时候,就把这个商品的数量加一。到了设置getSum方法当中,传入的参数是HashSetgood,用迭代器获取每一个商品,再把商品的总和进行相加再返回总和。在主类当中就用键盘输入对应的参数,调用getSum方法,把最后的总和计算出来。

总结以下:
1.为何要同时重写hashcode和equals方法,是因为避免重复的元素进入到这个购物车当中
2.HashSet是一个很好的工具,用来存放对象
3.对于遍历HashSet里面的对象需要用到Iterator<类型> it=goods.iterator();,然后就会把HashSet里面的对象迭代出来,然后再重新定义一个类,用来获取每一个对象goods的具体属性,比如number啊这些因为number,name这些是Goods类才有的属性
4.对于这种 既不想放入HashSet里面,也不想少一个,就比如这个购物车的,就要重写equals方法的时候通过boolean判断,如果是相同的说明是同一个对象,那么再把它的数量+1(具体可以参照上面的题目要求——重复的商品不放入购物车但是要数量+1)

猜你喜欢

转载自blog.csdn.net/mmmm0303/article/details/106224115
今日推荐