编程5-1,添加商品到购物车,死活写不出来,卡了半个多月了
// 添加商品到购物车 public void addGoodsToCart(GoodsManage gm) { Scanner sc = new Scanner(System.in); if (gm.getGoodsSet().size() == 0) { System.out.println("请先添加商品信息!"); } else { gm.displayAllGoods(); boolean flag = false; Goods goodsg = null; System.out.println("请输入要添加的商品编号:"); String goodsId = sc.next(); Set<Goods> goods = gm.getGoodsSet(); for(Goods g:goods) { if(g.getGoodsId().equals(goodsId)) { flag = true; goodsg = g; break; } } if(flag = true) { System.out.println("请输入要添加的商品数量:"); int goodsNum = sc.nextInt(); GoodsInCart gic = new GoodsInCart(goodsg, goodsNum); } } /* * 添加购物车的方法中先判断商品是否导入,如果商品没有导入,则提示请先导入商品, * 否则提示请输入要添加的商品编号,循环遍历导入的商品,判断输入商品编号是否存在, * 如果存在则输入商品数量,并将商品添加到购物车,如果商品不存在,则提示商品不存在。 */ }
我看了别人的提问中的代码,和老师给别人的回复,谢了这些。然而一运行,直接报空指针异常,求问老师给个指导。
我发现我集合那部分很弱,感觉从开始学集合到现在做题,遇到集合的只是基本上全是懵的状态,感觉像和集合处于两个平行世界一样,一直不想交不来电不知所措一见就晕。求老师指点。
TestDemo.java里面添加到购物车的部分代码在这里。
case 2: // 购物车 test.shoppingcart();// 购物车管理1-2-3-4-9 System.out.println("请输入对应的数字对购物车进行管理:"); boolean flag_2 = true; while(flag_2) { int n_2 = sc.nextInt(); switch(n_2) { case 1: // 添加商品到购物车 System.out.println("添加商品到购物车"); System.out.println("所有商品信息为:"); goodsmanage.displayAllGoods(set); // 显示所有商品信息 shoppingcart.addGoodsToCart(goodsmanage); break; case 2: // 修改购物车中的商品数量 break; case 3: // 显示购物车中的所有商品信息 break; case 4: // 结算 break; case 9: // break; default: break; } }
运行到添加购物车报错是这样子的
************************************************************** **购物车管理** 1--添加商品到购物车 2--修改购物车中的商品数量 3--显示购物车中的所有商品信息 4--结算 9--返回上一级菜单 ************************************************************** 请输入对应的数字对购物车进行管理: 1 添加商品到购物车 Exception in thread "main" java.lang.NullPointerException at com.imooc.HomeWork4.ShoppingCart.addGoodsToCart(ShoppingCart.java:36) at com.imooc.HomeWork4.TestDemo.main(TestDemo.java:109)
9
收起
正在回答
9回答
同学你好,首先GoodsManage类和ShoppingCart类中的goodsSet对象和shoppingCart对象需要初始化。如:
另外导入商品的importGoods()方法,不需要参数,应该是将商品导入到类中定义的goodsSet对象中,如:
显示所有商品信息的方法也不需要参数,在方法中应该遍历goodsSet对象。如:
同学修改一下再试试,如果还有问题,可以继续提问。祝:学习愉快~
讓倪飛翔
2019-02-12 15:32:42
运行出错结果:
******************************* **主菜单** 1--商品管理 2--购物车 0--退出 ******************************* 请输入对应数字进行操作: 1 ************************************************************** **商品管理** 1--商品信息导入 2--显示所有商品信息 9--返回上一级菜单 ************************************************************** 请输入对应的数字对商品进行管理: 1 商品信息导入 导入成功! ************************************************************** **商品管理** 1--商品信息导入 2--显示所有商品信息 9--返回上一级菜单 ************************************************************** 请输入对应的数字对商品进行管理: 2 显示所有商品信息 所有商品信息为: 商品信息 [编号:goods004, 名称:手机, 价格:2300.0, 描述:android手机] 商品信息 [编号:goods002, 名称:饮水机, 价格:299.0, 描述:带净化功能的饮水机] 商品信息 [编号:goods003, 名称:笔记本电脑, 价格:4999.0, 描述:15寸笔记本电脑] 商品信息 [编号:goods001, 名称:水杯, 价格:56.0, 描述:不锈钢水杯] ************************************************************** **商品管理** 1--商品信息导入 2--显示所有商品信息 9--返回上一级菜单 ************************************************************** 请输入对应的数字对商品进行管理: 9 ******************************* **主菜单** 1--商品管理 2--购物车 0--退出 ******************************* 2 ************************************************************** **购物车管理** 1--添加商品到购物车 2--修改购物车中的商品数量 3--显示购物车中的所有商品信息 4--结算 9--返回上一级菜单 ************************************************************** 请输入对应的数字对购物车进行管理: 1 添加商品到购物车 所有商品信息为: Exception in thread "main" java.lang.NullPointerException at com.imooc.HomeWork4.ShoppingCart.addGoodsToCart(ShoppingCart.java:37) at com.imooc.HomeWork4.TestDemo.main(TestDemo.java:109) 商品信息 [编号:goods004, 名称:手机, 价格:2300.0, 描述:android手机] 商品信息 [编号:goods002, 名称:饮水机, 价格:299.0, 描述:带净化功能的饮水机] 商品信息 [编号:goods003, 名称:笔记本电脑, 价格:4999.0, 描述:15寸笔记本电脑] 商品信息 [编号:goods001, 名称:水杯, 价格:56.0, 描述:不锈钢水杯] 9999999 gggyyyuuuuiiiooo
讓倪飛翔
2019-02-12 15:31:38
TestDemo.java类
import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Scanner; import java.util.Set; import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils.Text; // 测试类 public class TestDemo { // 主菜单方法 public void action() { System.out.println("*******************************"); System.out.println(" **主菜单**"); System.out.println(" 1--商品管理"); System.out.println(" 2--购物车"); System.out.println(" 0--退出"); System.out.println("*******************************"); } // 商品管理方法1-2-9 public void goodsmanage() { System.out.println("**************************************************************"); System.out.println(" **商品管理**"); System.out.println(" 1--商品信息导入"); System.out.println(" 2--显示所有商品信息"); System.out.println(" 9--返回上一级菜单"); System.out.println("**************************************************************"); } // 购物车管理1-2-3-4-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("**************************************************************"); } public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 将商品放入HashSet中 Set<Goods> set = new HashSet<Goods>(); // 商品管理 GoodsManage goodsmanage = new GoodsManage(); TestDemo test = new TestDemo(); test.action(); // 主菜单方法 // 购物车 ShoppingCart shoppingcart = new ShoppingCart(); // 购物车中商品信息 System.out.println("请输入对应数字进行操作:"); boolean flag = true; while(flag) { int n = sc.nextInt(); switch(n) { case 0: flag = false; break; case 1: // 商品管理 boolean flag_1 = true; while(flag_1) { test.goodsmanage(); // 商品管理方法1-2-9 System.out.println("请输入对应的数字对商品进行管理:"); int n_1 = sc.nextInt(); switch(n_1) { case 1: // 商品信息导入 System.out.println("商品信息导入"); goodsmanage.importGoods(set); // 商品信息导入 // //商品名与商品映射 // Map<String,Goods> goodsmap = new HashMap<String,Goods>(); // for(Goods goods : set){ // goodsmap.put(goods.getGoodsId(),goods); // } // System.out.println("导入成功!"); break; case 2: // 显示所有商品信息 System.out.println("显示所有商品信息"); System.out.println("所有商品信息为:"); goodsmanage.displayAllGoods(set); // 显示所有商品信息 break; case 9: test.action(); // 主菜单方法 flag_1 = false; break; default: System.out.println("请输入正确的数字!谢谢!"); break; } } break; case 2: // 购物车 test.shoppingcart();// 购物车管理1-2-3-4-9 System.out.println("请输入对应的数字对购物车进行管理:"); boolean flag_2 = true; while(flag_2) { int n_2 = sc.nextInt(); switch(n_2) { case 1: // 添加商品到购物车 System.out.println("添加商品到购物车"); System.out.println("所有商品信息为:"); goodsmanage.displayAllGoods(set); // 显示所有商品信息 System.out.println("9999999"); shoppingcart.addGoodsToCart(goodsmanage); System.out.println("---------------"); break; case 2: // 修改购物车中的商品数量 break; case 3: // 显示购物车中的所有商品信息 break; case 4: // 结算 break; case 9: // break; default: break; } } break; default: break; } } } }
讓倪飛翔
2019-02-12 15:31:14
ShoppingCart.java类
import java.util.Map; import java.util.Scanner; import java.util.Set; // 购物车类 public class ShoppingCart { // 属性:购物车 private Map<String, GoodsInCart> shoppingCart; // 无参构造 public ShoppingCart() { } // 带参构造 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 addGoodsToCart(GoodsManage gm) { System.out.println("gggyyyuuuuiiiooo"); Scanner sc = new Scanner(System.in); if (gm.getGoodsSet().size() == 0) { System.out.println("请先添加商品信息!"); } else { gm.displayAllGoods(null); boolean flag = false; Goods goodsg = null; System.out.println("请输入要添加的商品编号:"); String goodsId = sc.next(); Set<Goods> goods = gm.getGoodsSet(); for(Goods g:goods) { if(g.getGoodsId().equals(goodsId)) { flag = true; goodsg = g; break; } } if(flag = true) { System.out.println("请输入要添加的商品数量:"); int goodsNum = sc.nextInt(); GoodsInCart gic = new GoodsInCart(goodsg, goodsNum); } } /* * 添加购物车的方法中先判断商品是否导入,如果商品没有导入,则提示请先导入商品, * 否则提示请输入要添加的商品编号,循环遍历导入的商品,判断输入商品编号是否存在, * 如果存在则输入商品数量,并将商品添加到购物车,如果商品不存在,则提示商品不存在。 */ } // 修改购物车中的商品数量 public void updateNumInCart() { /* * 修改购物车中的商品数量的方法中先判断购物车中是否存在商品。 不存在则提示请先添加商品到购物车,如果购物车已存在商品,则提示输入商品编号, * 并判断输入的商品编号是否存在在购物车中,如果存在,则提示输入修改后的商品数量, * 为0则移除商品,不为0则修改商品数量,如果商品编号不存在,则提示商品编号不存在, 请重新输入。 */ } // 显示购物车中的所有商品 public void displayAllInCart() { /* * 显示购物车中所有的商品信息的方法中,先判断购物车是否为空,为空则提示购物车为空, 请先添加商品,不为空则循环显示购物车中的商品及数量。 */ } // 结算 public void settleAccounts() { /* * 结算的方法中先判断购物车是否为空,为空则提示购物车为空,请先添加商品。 不为空,则遍历购物车中的商品及数量,计算商品价格和数量的乘积并输出。 */ } }
讓倪飛翔
2019-02-12 15:30:43
GoodsManage.java类
import java.util.Iterator; import java.util.Set; // 商品管理类 public class GoodsManage { private Set<Goods> goodsSet; // 无参构造 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> set) { // 定义商品信息 Goods goods001 = new Goods("goods001","水杯",56,"不锈钢水杯"); Goods goods002 = new Goods("goods002","饮水机",299,"带净化功能的饮水机"); Goods goods003 = new Goods("goods003","笔记本电脑",4999,"15寸笔记本电脑"); Goods goods004 = new Goods("goods004","手机",2300,"android手机"); // 添加商品 set.add(goods001); set.add(goods002); set.add(goods003); set.add(goods004); } // 显示所有商品信息 public void displayAllGoods(Set<Goods> set) { Iterator<Goods> it = set.iterator(); while(it.hasNext()) { System.out.println(it.next()); } } }
讓倪飛翔
2019-02-12 15:30:12
GoodsInCart.java类
// 购物车中的商品信息类 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; } }
讓倪飛翔
2019-02-12 15:29:29
Goods.java类
// 商品类 public class Goods { // 属性:商品编号、名称、价格、描述 private String goodsId; private String goodsName; private double price; private String goodsDesp; // 无参构造 public Goods() { } // 带参构造 public Goods(String goodsId) { super(); this.goodsId = goodsId; } 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; } // toString()方法 @Override public String toString() { return "商品信息 [编号:" + goodsId + ", 名称:" + goodsName + ", 价格:" + price + ", 描述:" + goodsDesp + "]"; } }
Java零基础入门18
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星