编程5-1,添加商品到购物车,死活写不出来,卡了半个多月了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | // 添加商品到购物车 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里面添加到购物车的部分代码在这里。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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 5 6 7 8 9 10 11 12 13 14 | ************************************************************** **购物车管理** 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 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | ******************************* **主菜单** 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类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | 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类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | 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类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 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类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | // 购物车中的商品信息类 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类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | // 商品类 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积分~
来为老师/同学的回答评分吧