1.请老师帮我修改一下代码,响了很久都没相通

1.请老师帮我修改一下代码,响了很久都没相通

疑惑处:1.购物车类中的修改购物车中商品数量方法;2.结算方法中的计算总价的方法;3.这几个方法可不可以打包在一起?
4.怎么样设置使一个商品比如手机对应的就是他的购买数量?
想法:针对问题1:利用从键盘接受数据更新购买的数量,利用容器Iterator、Map、set方法,想设计如果从键盘
接受的数据为零强制购买数量为0;2.解决问题3和问题4就可以解决问题2;3.该怎么样设置商品有它对应的价格?用List吗?
代码如下:
package com.imooc.goods;//1.商品类

public class Goods {
	// 定义属性
	private String goodsId;// 商品编号
	private String goodsName;// 商品名称
	private double price;// 商品价格
	private String goodsDesp;//商品描述
	// 构造方法

	public Goods() {
		super();
	}
	
	public Goods(String goodsId, String goodsName, double price, String goodsDesp) {
		super();
		this.goodsId = goodsId;
		this.goodsName = goodsName;
		this.price = price;
		this.goodsDesp = goodsDesp;
	}



	// getter、setter方法
	public String getGoodsId() {
		return goodsId;
	}

	public void setGoodsId(String goodsId) {
		this.goodsId = goodsId;
	}

	public String getGoodsName() {
		return goodsName;
	}

	public void setGoodsName(String goodsName) {
		this.goodsName = goodsName;
	}

	public double getPrice() {
		return price;
	}

	public void setPrice(double price) {
		this.price = price;
	}

	public String getGoodsDesp() {
		return goodsDesp;
	}

	public void setGoodsDesp(String goodsDesp) {
		this.goodsDesp = goodsDesp;
	}

	// hashCode()\equals\toString方法
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((goodsDesp == null) ? 0 : goodsDesp.hashCode());
		result = prime * result + ((goodsId == null) ? 0 : goodsId.hashCode());
		result = prime * result + ((goodsName == null) ? 0 : goodsName.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.getClass() == Goods.class) {
			 Goods goods = ( Goods) obj;
			return goods.getGoodsName().equals(goodsName) && goods.getPrice() == price && goods.getGoodsId().equals(goodsId)&& goods.getGoodsDesp().equals(goodsDesp) ;
		} 
		return false;
	}

	public String toString() {
		return "商品信息"+"商品编号:" + goodsId + ",商品名称:" + goodsName + ",商品价格:" + price+",商品描述:" +goodsDesp;
	}
}
package com.imooc.goods;//2.商品管理类

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class GoodsManager {
	Set<Goods> set = new HashSet<Goods>();

	// 商品信息导入的方法
	public void importGoods(Goods e) {
		set.addAll(set);
	}

	// 显示所有商品信息的方法
	public void displayAllGoods() {

		Iterator<Goods> it = set.iterator();
		while (it.hasNext()) {
			System.out.println(it.next() + " ");
		}
	}

	public static void main(String[] args) {
		// 定义GoodSManager类的对象
		GoodsManager myGoodsManager = new GoodsManager();
		// 定义商品对象
		Goods goods1 = new Goods("S001", "手机", 5000, "5G手机");
		Goods goods2 = new Goods("S002", "笔记本", 6000, "苹果最新款");
		Goods goods3 = new Goods("S003", "洗衣机", 7000, "海尔洗衣机,等离子熨洗");
		Goods goods4 = new Goods("S004", "冰箱", 8000, "海尔冰箱,比绝对零度低一点");
		// 导入商品信息
		myGoodsManager.importGoods(goods1);
		myGoodsManager.importGoods(goods2);
		myGoodsManager.importGoods(goods3);
		myGoodsManager.importGoods(goods4);
		// 显示所有商品信息
		myGoodsManager.displayAllGoods();
	}
}
package com.imooc.goods;//3.购物车中的商品信息类

public class GoodsInCart {
	// 定义属性
	private Goods goods;
	private int num;

	// 无参构造方法、有参构造方法
	public GoodsInCart() {
		super();
	}
	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;
	}

}
package com.imooc.goods;//4.购物车类

import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class ShoppingCart {
	Goods goods=new Goods();
	Map<String, GoodsInCart> shoppingCart = new HashMap<String, GoodsInCart>();
	private String goodsId;

	// 构造方法
	public ShoppingCart() {
		super();
	}

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

	// getter和setter方法
	public Map<String, GoodsInCart> getShoppingCart() {
		return shoppingCart;
	}

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

	// 添加商品到购物车的方法
	public void addGoodsIncart(GoodsManager gm) {
		System.out.print("请选择要购买的商品");
		int i = 0;
		while (i < 4) {
			System.out.println("请输入第" + (i + 1) + "条商品信息");
			if(shoppingCart.containsKey(goods.getGoodsId())) {
				System.out.println("商品编号已经存在!请重新输入一个商品编号");
				//结束当前循环,跳入到下一个循环
				continue;
			}
			System.out.println("请输入商品名称");
			String goodsName=goods.getGoodsName();
			System.out.println("请输入商品描述");
			String goodsDesp=goods.getGoodsDesp();
			System.out.println("请输入商品价格");
			double goodsPrice=0;
			try {
			goodsPrice = goods.getPrice();
			}catch(java.util.InputMismatchException e){
				System.out.println("商品价格格式不正确!请输入数值型格式的数值");
				continue;
			}

			Goods goods = new Goods(goodsId, goodsName, goodsPrice,goodsDesp);
			// 将商品信息添加到HashMap中
			shoppingCart.putAll(shoppingCart);
			i++;
		}
	}

	// 修改购物车中商品数量的方法,数量从键盘接受,在删除
	public void disPlayAllIncart() {
		int i=0;
		Set<Goods> set = new HashSet<Goods>();
		set.addAll(set);
		System.out.println("请输入整数型数据");
		System.out.println("请输入第" + (i + 1) + "条商品信息");
		//for循环,依次输入四个商品需要购买的数量,默认为零
		if (i < 4) {
			
			Scanner console = new Scanner(System.in);
			GoodsInCart goodsInCart = new GoodsInCart();
			set.remove(goodsInCart.getNum());
			// int shoppingCArt=myGoodsInCart.getNum();
			int myGoodsInCart = console.nextInt();
			//如果什么都不输入,默认购买数量为零
/*			if(myGoodsInCart) {
				return myGoodsInCart=0;
			}*/
			set.add(this.goods);
		}
		Iterator<Goods> it = set.iterator();
		it = set.iterator();
		while (it.hasNext()) {
			System.out.println(it.next() + " ");
		}
	}

	// 显示购物车中的所有商品
	public void updateNumIncart() {
		Iterator<GoodsInCart> itGoods = shoppingCart.values().iterator();
		while (itGoods.hasNext()) {
			System.out.println(itGoods.next());
		}
	}

	// 结算方法:单价乘以对应商品购买数量
	public void settleAllCounts() {
		int sumPrice = goods1.getNum() * 5000 + goods2.getNum() * 6000 + goods3.getNum() * 7000
				+ goods4.getNum() * 6000;
		System.out.println("您的消费总额为:" + sumPrice);
	}
}


正在回答 回答被采纳积分+1

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

3回答
提问者 Ironxi_work 2018-04-30 21:26:45
 // 添加商品到购物车的方法 
 public void addGoodsIncart(GoodsManager gm) { 
 System.out.print("请选择要购买的商品");
  int i = 0;
  while (i < 4) { 
  System.out.println("请输入第" + (i + 1) + "条商品信息"); 
  if(shoppingCart.containsKey(goods.getGoodsId())) { 
  System.out.println("商品编号已经存在!请重新输入一个商品编号");
   //结束当前循环,跳入到下一个循环 
   continue;
    } 
    if(((Map<String,GoodsInCart>) goods).size()==0) { 
    System.out.println("请输入商品信息"); 
    } 
    System.out.println("请输入商品名称"); 
    String goodsName=goods.getGoodsName(); 
    System.out.println("请输入商品描述"); 
    String goodsDesp=goods.getGoodsDesp(); 
    System.out.println("请输入商品价格");
     double goodsPrice=0; 
     try { 
     goodsPrice = goods.getPrice();
      }catch(java.util.InputMismatchException e){ 
      System.out.println("商品价格格式不正确!请输入数值型格式的数值"); 
      continue; 
      } 
      Goods goods = new Goods(goodsId, goodsName, goodsPrice,goodsDesp); 
      // 将商品信息添加到HashMap中 
      shoppingCart.putAll(shoppingCart); 
      i++; 
      }
       }


  • 你的这个方法里,并没有见你输入商品编号呢?商品编号建议直接从键盘录入,然后在进行查询添加~~
    2018-05-01 23:06:52
喜欢做梦的鱼 2018-04-30 19:35:58

额,“光武购物车需要要到的耽搁方法”没看懂是什么意思。另外,建议同学以后贴代码不要在回复中,新建回答贴进来,回复中代码、注释混杂格式比较混乱,不利于准确定位代码问题。

  • 提问者 Ironxi_work #1
    首先谢谢您的回答。表示问题是这样添加商品到购物车的方法这里没想通,对比别人的代码和自己的代码,发现差异恒大
    2018-04-30 21:21:54
  • 提问者 Ironxi_work #2
    代码重新贴出来了,还得请教一下你
    2018-04-30 21:23:18
好帮手慕珊 2018-04-09 10:45:40

1、添加商品到购物车的方法,这个思路是有问题的,商品都已经放到GoodsManager的对象gm中了,所以此处不用再输入商品描述和价格了。正确的思路是,首先判断gm中是否有商品,也就是gm.size()是否为0,如果为0就给出商品未导入的提示。如果不为0,就提示输入商品编号,然后判断商品编号在gm中是否存在,如果存在就接着输入商品数量,然后把从gm中查询到的商品和商品数量一起,创建一个GoodsInCart类的对象,然后添加到shoppingCart中。

2、显示购物车中所有商品的方法,就是遍历shoppingCart这个集合,把信息输出就可以了

3、结算后要清空购物车,也就是调用shoppingCart的clear()方法

4、修改购物车中商品数量,先输入商品编号,然后去shoppingCart中查询该商品是否存在,如果不存在给出错误提示,如果存在,就把查询到的商品信息存到一个Goods类的引用goods中,然后输入数量,调用goods的设置数量的方法去设置商品数量。如果是为0的情况,设置完商品数量后,再把该商品从shoppingCart中移除。

按上述思路完成就可以解决你的几个问题啦。

祝学习愉快!


  • 提问者 Ironxi_work #1
    老师关于第一点,购物车这样修改可以吗? // 添加商品到购物车的方法 public void addGoodsIncart(GoodsManager gm) { System.out.print("请选择要购买的商品"); int i = 0; while (i < 4) { System.out.println("请输入第" + (i + 1) + "条商品信息"); if(shoppingCart.containsKey(goods.getGoodsId())) { System.out.println("商品编号已经存在!请重新输入一个商品编号"); //结束当前循环,跳入到下一个循环 continue; } if(((Map<String,GoodsInCart>) goods).size()==0) { System.out.println("请输入商品信息"); } System.out.println("请输入商品名称"); String goodsName=goods.getGoodsName(); System.out.println("请输入商品描述"); String goodsDesp=goods.getGoodsDesp(); System.out.println("请输入商品价格"); double goodsPrice=0; try { goodsPrice = goods.getPrice(); }catch(java.util.InputMismatchException e){ System.out.println("商品价格格式不正确!请输入数值型格式的数值"); continue; } Goods goods = new Goods(goodsId, goodsName, goodsPrice,goodsDesp); // 将商品信息添加到HashMap中 shoppingCart.putAll(shoppingCart); i++; } }
    2018-04-29 23:24:48
  • 提问者 Ironxi_work #2
    老师,我对比了一下我写的和这个同学写的https://class.imooc.com/lesson/110#mid=3546,怎么感觉我差距好大?老师能在指导一下光武购物车需要要到的耽搁方法该怎么去写吗?表示还是一知半解?
    2018-04-29 23:26:24
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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