添加商品到购物车程序终止了,请老师解答一下

添加商品到购物车程序终止了,请老师解答一下

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
/**
 * 购物车类
 * @author xiaod
 *
 */
public class ShoppingCart {
 //属性
 Map<String,GoodsInCart> shoppingCart=new HashMap<String,GoodsInCart>();
 
 //构造方法
 public void 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 addGoodsToCart(GoodsManage gm,Set<Goods>goodsSet) {
  
  if(gm.getGoodsSet().size()==0) {
   System.out.println("请先导入商品信息!");
  }else {
   System.out.println("添加商品到购物车:");
   System.out.println("所有商品信息为:");
   gm.displayAllGoods(goodsSet);
   System.out.println("请输入要添加的商品编号:");
   Scanner sc=new Scanner(System.in);
   String goodsId=sc.next();
   Iterator<Goods> it=gm.getGoodsSet().iterator();
   boolean flag=false;
   Goods goods=null;
   while(it.hasNext()) {
    goods=it.next();
    if(goods.getGoodsId().equals(goodsId)) {
     flag=true;
     break;
    }
   }
   if(flag) {
    System.out.println("请输入要添加的商品数量:");
    int num=sc.nextInt();
    if(num!=0) {
     GoodsInCart gic=new GoodsInCart(goods,num);
     shoppingCart.put(goodsId, gic);
    }else {
     System.out.println("商品数量不为零!");
    }
   }else {
    System.out.println("请输入正确的商品编号!");
   }
  }
 }
 
 //修改购物车中商品的数量
 public void updateNumInCart() {
  if(shoppingCart.size()==0) {
   System.out.println("购物车中暂无商品信息,请先添加商品!");
  }else {
   System.out.println("修改购物车中商品的数量");
   System.out.println("请输入要修改商品的编号");
   Scanner sc=new Scanner(System.in);
   String goodsId=sc.next();
   Iterator<GoodsInCart> itGoodsInCart=shoppingCart.values().iterator();
   boolean flag=false;
   Goods goods=null;
   while(itGoodsInCart.hasNext()) {
    goods=itGoodsInCart.next().getGoods();
    if(goods.getGoodsId().equals(goodsId)) {
     flag=true;
     break;
    }
   }
  }
 }
  //显示购物车中的所有商品
  public void displayAllInCart(){
   if(shoppingCart.values().size()==0) {
    System.out.println("购物车中暂无商品信息,请先添加商品!");
   }else {
    System.out.println("显示购物车中的所有商品信息");
    Iterator<GoodsInCart> itGoodsInCart = shoppingCart.values().iterator();
    while(itGoodsInCart.hasNext()) {
     System.out.println(itGoodsInCart.next());
    }
   }
  }
  
  //结算
  public void settleAccounts() {
   System.out.println("结算");
   double sum=0;
   System.out.println("商品的总价为:"+sum);
   Iterator<GoodsInCart> it=shoppingCart.values().iterator();
   while(it.hasNext()) {
    GoodsInCart gic=it.next();
    Goods g=gic.getGoods();
    System.out.println("商品信息[编号:"+g.getGoodsId()+",名称:"+g.getGoodsName()+",价格:"
      +g.getPrice()+",商品描述:"+g.getGoodsDesp()+",数量:"+gic.getNum()+"]");
    double sum1=g.getPrice()*gic.getNum();
    sum=sum+sum1;
   }
  }
 }


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

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

9回答
一叶知秋519 2017-10-23 11:10:07

将ShoppingCart类中第40行代码改为:Iterator<Goods> it = goodsSet.iterator();

祝学习愉快~

一叶知秋519 2017-10-22 00:04:55

在addGoodsToCart方法中,对商品库是否为空的判断改为goodsSet.size()==0;将测试类中manageGoods方法中的GoodsManage类的对象去掉,保证前后操作的是同一个GoodsManage;另外你的测试类中,manageShoppingCart方法依旧和manageGoods方法一样,使用递归调用来保证程序的连贯性;即

switch(num) {
  case 1:
//   goodsManage.displayAllGoods(goodsSet);
   shoppingCart.addGoodsToCart(goodsManage,goodsSet);
   this.manageShoppingCart();
   break;
  case 2:
   shoppingCart.updateNumInCart();
   this.manageShoppingCart();
   break;
  case 3:
   shoppingCart.displayAllInCart();
   this.manageShoppingCart();
   break;
  case 4:
   shoppingCart.settleAccounts();
   this.manageShoppingCart();
   break;
  case 9:
   mainMenu();
   break;
    
  }

祝学习愉快~

  • 提问者 无厘头的童年 #1
    **购物车管理** 1--添加商品到购物车 2--修改购物车中的所有商品数量 3--显示购物车中的所有商品信息 4--结算 9--返回上一级菜单 ============================================== 请输入对应的数字对购物车进行管理 1 请先导入商品! ============================================== **购物车管理** 1--添加商品到购物车 2--修改购物车中的所有商品数量 3--显示购物车中的所有商品信息 4--结算 9--返回上一级菜单 ============================================== 请输入对应的数字对购物车进行管理 goods004 Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Unknown Source) at java.util.Scanner.next(Unknown Source) at java.util.Scanner.nextInt(Unknown Source) at java.util.Scanner.nextInt(Unknown Source) at com.imooc.trolley.TestDemo.manageShoppingCart(TestDemo.java:61) at com.imooc.trolley.TestDemo.manageShoppingCart(TestDemo.java:68) at com.imooc.trolley.TestDemo.mainMenu(TestDemo.java:108) at com.imooc.trolley.TestDemo.manageGoods(TestDemo.java:44) at com.imooc.trolley.TestDemo.manageGoods(TestDemo.java:41) at com.imooc.trolley.TestDemo.manageGoods(TestDemo.java:37) at com.imooc.trolley.TestDemo.mainMenu(TestDemo.java:105) at com.imooc.trolley.TestDemo.main(TestDemo.java:119)
    2017-10-22 00:41:02
  • 提问者 无厘头的童年 #2
    运行时报错啦
    2017-10-22 00:41:46
  • 提问者 无厘头的童年 #3
    后面添加商品运行还是有问题,添加商品编号之后不能在添加数量。
    2017-10-22 00:45:20
提问者 无厘头的童年 2017-10-21 23:36:38
public class Goods {
 private String goodsId;  //商品编号
 private String goodsName;//商品名称
 private double price;    //商品价格
 private String goodsDesp;//商品描述
 
 //构造方法
 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()方法
 @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;
 }
 //equals()方法
 @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 (goodsDesp == null) {
   if (other.goodsDesp != null)
    return false;
  } else if (!goodsDesp.equals(other.goodsDesp))
   return false;
  if (goodsId == null) {
   if (other.goodsId != null)
    return false;
  } else if (!goodsId.equals(other.goodsId))
   return false;
  if (goodsName == null) {
   if (other.goodsName != null)
    return false;
  } else if (!goodsName.equals(other.goodsName))
   return false;
  if (Double.doubleToLongBits(price) != Double.doubleToLongBits(other.price))
   return false;
  return true;
 }
 @Override
 public String toString() {
  return "商品信息 [编号:" + goodsId + ", 名称:" + goodsName + ", 价格:" + price + ", 描述:"
    + goodsDesp + "]";
 }
}


提问者 无厘头的童年 2017-10-21 23:36:03
public class GoodsInCart {
 //属性
 private Goods goods; //商品信息
 private int num;     //商品数量
 
 //构造方法
 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;
 }
 
}


提问者 无厘头的童年 2017-10-21 23:35:24
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
/**
 * 测试类
 * @author xiaod
 *
 */
public class TestDemo {
 private Set<Goods> goodsSet=new HashSet<Goods>();
 private ShoppingCart shoppingCart=new ShoppingCart();  //初始化购物车
 
 GoodsManage goodsManage=new GoodsManage();
 
 //商品管理
 public void manageGoods() {
  System.out.println("==============================================");
  System.out.println("**商品管理**");
  System.out.println("1--商品信息导入");
  System.out.println("2--显示所有商品信息");
  System.out.println("9--返回上一级菜单");
  System.out.println("==============================================");
  
  System.out.println("请输入对应的数字对商品进行管理:");
  Scanner src = new Scanner(System.in);
  int num = src.nextInt();
  
  GoodsManage goodsManage=new GoodsManage();
  
  //根据商品编号执行操作
  switch(num) {
  case 1:
   goodsManage.importGoods(goodsSet);
   this.manageGoods();
   break;
  case 2:
   goodsManage.displayAllGoods(goodsSet);
   this.manageGoods();
   break;
  case 9:
   mainMenu();
   break;
  }
 }
 //购物车管理
 public void manageShoppingCart() {
  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("==============================================");
  
  System.out.println("请输入对应的数字对购物车进行管理");
  Scanner src=new Scanner(System.in);
  int num=src.nextInt();
  
  //根据编号执行操作
  switch(num) {
  case 1:
   goodsManage.displayAllGoods(goodsSet);
   shoppingCart.addGoodsToCart(goodsManage,goodsSet);
  
   break;
  case 2:
   shoppingCart.updateNumInCart();
   break;
  case 3:
   shoppingCart.displayAllInCart();
   break;
  case 4:
   shoppingCart.settleAccounts();
   break;
  case 9:
   mainMenu();
   break;
   
  }
 }
 //主菜单方法
 public void mainMenu() {
  //开始进入点
  System.out.println("==================");
  System.out.println("**主菜单**");
  System.out.println("1--商品管理");
  System.out.println("2--购物车");
  System.out.println("0--退出");
  System.out.println("==================");
  
  System.out.println("请输入对应的数字操作:");
  Scanner src=new Scanner(System.in);
  int num = src.nextInt();
  
  //根据编号执行操作
  switch(num) {
  case 1:
   manageGoods();
   break;
  case 2:
   manageShoppingCart();
   break;
  case 0:
   break;
  }
 }
 
public static void main(String[] args) {
 TestDemo demo=new TestDemo();
 demo.mainMenu();
}
}


一叶知秋519 2017-10-21 23:29:16

你好,你把全部类都贴出来吧,看了你的这两个类感觉完成的没有问题。祝学习愉快~

提问者 无厘头的童年 2017-10-20 19:39:27
提问者 无厘头的童年 2017-10-20 19:35:44
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/**
 * 商品管理类
 * @author xiaod
 *
 */
public class GoodsManage {
 //属性
 private  Set<Goods> goodsSet=new HashSet<Goods>(); //存放商品的容器
 //构造方法
 public GoodsManage() {
  
 }
 
 public GoodsManage(Set<Goods> goodsSet) {
  super();
  this.goodsSet = goodsSet;
 }
 //getter和setter方法
 public Set<Goods> getGoodsSet() {
  return goodsSet;
 }
 public void setGoodsSet(Set<Goods> goodsSet) {
  this.goodsSet = goodsSet;
 }
 
     //商品信息导入
 public void importGoods(Set<Goods> goodsSet) {
  goodsSet.add(new Goods("goods004","手机",2300,"Android手机"));
  goodsSet.add(new Goods("goods002","饮水机",299,"带净化功能的饮水机"));
  goodsSet.add(new Goods("goods003","笔记本电脑",4999,"15寸笔记本电脑"));
  goodsSet.add(new Goods("goods001","水杯",56, "不锈钢水杯"));
  
  System.out.println("商品信息导入");
  System.out.println("导入成功!");
  
 }
 
 
 //显示所有商品信息
 public void displayAllGoods(Set<Goods> goodsSet) {
  System.out.println("显示所有商品信息\n所有商品信息为:");
  Iterator it=goodsSet.iterator();
  while(it.hasNext()) {
   System.out.println(it.next());
  }
 }
 
}

请老师看一下

好帮手慕珊 2017-10-20 14:56:16

你好!请把GoodsManage类的代码贴出来,便于调试。

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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