还是之前的while直接跳出循环的问题,这是测试类的代码跟商品管理类一块

还是之前的while直接跳出循环的问题,这是测试类的代码跟商品管理类一块

//测试类
public class TestDemo {
	 //商品管理
	 public void GoodsManage(){
		 int num=0;
		 do {
		  System.out.println("****************************");
		  System.out.println("      "+"**商品管理**");
		  System.out.println("     "+"1--商品信息导入");
		  System.out.println("     "+"2--显示所有商品讯息");
		  System.out.println("     "+"9--返回上一级菜单");
		  System.out.println("****************************");
		  System.out.println("请输入对应数字进行商品管理:");
		  GoodsManage gm=new GoodsManage();
		  Scanner sc=new Scanner(System.in);
			 try{
			     num=sc.nextInt();
			 }catch(Exception e){
				 System.out.println("输入错误,请输入数值型数据");
			 }
		  switch (num) {
		  case 1:
			   gm.importGoods();
			   break;
		  case 2:
			 gm.displayAllGoods();
			 break;
		  case 9:
			break;
		  }
      } while (num!=9);
	 }
	//购物车管理
	 public void ShoppingCart(){
		 System.out.println("****************************");
		 System.out.println("      "+"**购物车管理**"+"      ");
		 System.out.println("     "+"1--添加商品到购物车"+"    ");
		 System.out.println("     "+"2--修改购物车中的商品数量"+" ");
		 System.out.println("     "+"3--显示购物车中的所有商品信息");
		 System.out.println("     "+"4--结算"+"      ");
		 System.out.println("     "+"9--返回上一级菜单"+"      ");
		 System.out.println("****************************");
		 GoodsManage gm=new GoodsManage();
		 ShoppingCart sCart=new ShoppingCart();
		 Scanner sc=new Scanner(System.in);
		 int num=0;
		 try{
		     num=sc.nextInt();
		 }catch(Exception e){
			 System.out.println("输入错误,请输入数值型数据");
		 }
		
		 switch (num) {
		case 1:
			sCart.addGoodsToCart(gm);
			break;
		case 2:
			sCart.updateNumInCart();
			break;
		case 3:
			sCart.displayAllInCart();
		case 4:
			sCart.settleAccounts();
		case 9:
			break;
		
		}
	 }
	 public static void main(String[] args) {
		 System.out.println("****************************");
		 System.out.println("      "+"**主菜单**");
		 System.out.println("      "+"1--商品管理");
		 System.out.println("      "+"2--购物车");
		 System.out.println("      "+"0--退出");
		 System.out.println("****************************");
		 System.out.println("请输入对应的数字进行操作:");
		 TestDemo td=new TestDemo();
		 Scanner sc=new Scanner(System.in);
		 int num=0;
		 try{
		     num=sc.nextInt();
		 }catch(Exception e){
			 System.out.println("输入错误,请输入数值型数据");
		 }
		switch(num) {
		case 1:
			td.GoodsManage();
		case 2:
	        td.ShoppingCart();
		case 0:
			break;
		}
	}
}
//商品管理类
private Set<Goods> goodSet=new HashSet<Goods>();// 存储商品的容器
 
    // 构造方法
    public GoodsManage() {
 
    }
 
    // getter和setter方法
    public GoodsManage(Set goodSet) {
        this.goodSet = goodSet;
    }
 
    public Set getGoodSet() {
        return goodSet;
    }
 
    public void setGoodSet(Set goodSet) {
        this.goodSet = goodSet;
    }
 
    // 商品信息导入
    public void importGoods() {
        Goods g1 = new Goods("s001", "手机", 132, "android手机");
        Goods g2 = new Goods("s002", "水杯", 56, "不锈钢水杯");
        Goods g3 = new Goods("s003", "笔记本电脑", 4999, "14寸笔记本电脑");
        goodSet.add(g1);
        goodSet.add(g2);
        goodSet.add(g3);
        this.setGoodSet(goodSet);
        System.out.println("商品讯息导入");
        System.out.println("导入成功!!!");
         
    }
 
    // 显示所以商品信息
    public void displayAllGoods() {
        System.out.println("显示所有商品信息\n所有商品信息为:");
        Iterator<Goods> it =goodSet.iterator();
        while (it.hasNext()) {
            System.out.println(it.next() + " ");
        }
    }
    //商品类
public class Goods {

	private String id;// 商品编号
	private String name;// 商品名字
	private double price;// 商品价格
	private String desp;// 商品描述

	// 构造方法
	public Goods() {

	}

	public Goods(String id, String name, double price, String desp) {
		this.id = id;
		this.name = name;
		this.price = price;
		this.desp = desp;
	}

	public Goods(String id, String name, double price) {
		this.id = id;
		this.name = name;
		this.price = price;
	}

	// getter和setter方法
	public String id() {
		return id;
	}

	public void id(String id) {
		this.id = id;
	}

	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 getDesp() {
		return desp;
	}

	public void setDesp(String desp) {
		this.desp = desp;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((desp == null) ? 0 : desp.hashCode());
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		long temp;
		temp = Double.doubleToLongBits(price);
		result = prime * result + (int) (temp ^ (temp >>> 32));
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Goods other = (Goods) obj;
		if (desp == null) {
			if (other.desp != null)
				return false;
		} else if (!desp.equals(other.desp))
			return false;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		if (Double.doubleToLongBits(price) != Double
				.doubleToLongBits(other.price))
			return false;
		return true;
	}

	// 重写toString
	public String toString() {
		return "商品信息" + id + "商品名称" + name + "商品价格" + price + "商品描述" + desp;
	}
}
如果说是没有重写hashCode()跟equals方法,要怎么重写,请详细讲下。


正在回答

登陆购买课程后可参与讨论,去登陆

2回答
 do {
          System.out.println("****************************");
          System.out.println("      "+"**商品管理**");
          System.out.println("     "+"1--商品信息导入");
          System.out.println("     "+"2--显示所有商品讯息");
          System.out.println("     "+"9--返回上一级菜单");
          System.out.println("****************************");
          System.out.println("请输入对应数字进行商品管理:");
          GoodsManage gm=new GoodsManage();
          Scanner sc=new Scanner(System.in);
             try{
                 num=sc.nextInt();
             }catch(Exception e){
                 System.out.println("输入错误,请输入数值型数据");
             }
          switch (num) {
          case 1:
               gm.importGoods();
               break;
          case 2:
             gm.displayAllGoods();
             break;
          case 9:
            break;
          }
      } while (num!=9);

在你的这段代码中,每循环一次就会GoodsManage gm=new GoodsManage();也就是每次循环执行的时候都产生一个新的GoodsManage对象,所以,导入操作进行的数据添加,在查询的时候就无法展示出来,也就是你所说的循环无数据不执行。祝学习愉快~~

提问者 qq_寄给你一朵玫瑰_0 2017-10-03 11:11:32
加上上面的这是所以的代码
//购物车中的商品信息类
public class GoodsInCart {
	private Goods goods;// 商品信息
	private int num;// 商品数量

	// 构造方法
	public GoodsInCart() {

	}

	public GoodsInCart(Goods goods, int num) {
		super();
		this.goods = goods;
		this.num = num;
	}

	// getter和setter方法
	public Goods getGoods() {
		return goods;
	}

	public void setGoods(Goods goods) {
		this.goods = goods;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}
	//购物车类
public class ShoppingCart {
	private Map<String, GoodsInCart> shoppingCart  = new HashMap<String, GoodsInCart>(); // 购物车

	// 构造方法
	public ShoppingCart() {

	}

	public ShoppingCart(Map<String, GoodsInCart> shoppingCart ) {
		super();
		this.shoppingCart  = shoppingCart ;
	}

	// getter和setter方法

	public Map<String, GoodsInCart> gethSoppingCart () {
		return shoppingCart ;
	}

	public void setMap(Map<String, GoodsInCart> shoppingCart ) {
		this.shoppingCart  = shoppingCart ;
	}
	GoodsInCart gi=new GoodsInCart();
	Scanner sc = new Scanner(System.in);
    
	// 添加商品到购物车
	public void addGoodsToCart(GoodsManage gm){
		System.out.println("添加商品到购物车:");
		System.out.println("所有商品信息为:");
		Iterator<Goods> it = gm.getGoodSet().iterator();
		while (true) {
			while (it.hasNext()) {
				System.out.println(it.next());
				
			}
			try{
				System.out.println("请输入要添加的商品编号:");
				String ku = sc.next();
				GoodsInCart gi = new GoodsInCart();
				while (it.hasNext()) {
					Goods n = it.next();
					if (ku.equals(n.id())) {
						 // 将数量导入
						gi.setGoods(n);
						break;
					}
				}
				System.out.println("请输入要添加的商品数量:");
				int num=sc.nextInt();
				 // 将数量导入
				gi.setNum(num);
				 // 将物品放入购物车
				shoppingCart.put(ku, gi);
				break;
			} catch (Exception e) {
				System.out.println("输入错误,请重新输入!");
				continue;
			}
		}
		
	}

	// 修改购物车中的商品数量
	public void updateNumInCart(){
		System.out.println("修改购物车中商品数量");
		Iterator<GoodsInCart> it=shoppingCart.values().iterator();
		System.out.println("请输入要修改的商品编号:");
		String id=sc.next();
		
		while(it.hasNext()) {
			if (id.equals(gi.getGoods().id())) {
			it.next();
			break;
			}else{
				System.out.println("输入有误");
				continue;
			}
		}
		System.out.println("请输入要修改的商品数量:");
		int num=sc.nextInt();
		gi.setNum(num);
		if(num==0){
			shoppingCart.remove(gi.getGoods().id());
			System.out.println("因为商品数量为0,该商品已从购物车中移除!");
		}
		shoppingCart.put(id, gi);
		
	}

	//显示购物车中的所以商品
	public void displayAllInCart() {
	System.out.println("显示购物车中所有商品信息");
	
	Iterator<GoodsInCart> it=shoppingCart.values().iterator();
	while(it.hasNext()){
		System.out.println( it.next()+" ");
	  }
	}

	// 结算
	public void settleAccounts() {
    System.out.println("结算");
    double sum=0;
    Iterator<GoodsInCart> it=shoppingCart.values().iterator();
   
    while(it.hasNext()){
    	GoodsInCart	 gs=it.next();
    	sum=sum+gs.getNum()*gs.getGoods().getPrice();
    	shoppingCart.put(gi.getGoods().id(), gi);
    }
    System.out.println("商品的总价为: "+ sum);
    while (it.hasNext()) {
		gi=it.next();
		System.out.println("商品名称: "+gi.getGoods().getName()+"商品价格:"+gi.getGoods().getPrice()+
				"商品描述:"+gi.getGoods().getDesp()+"商品数量:"+gi.getNum());
	  }
   }
}


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师