编程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 星