关于5-2结算的问题

关于5-2结算的问题

当我在控制台输出4时,直接跳到异常显示结果"请输入正确选项:",前面的运行全部正常

购物车管理类

 /**

    * 结算

    */

   public void settleAccount() {

       Set<Entry<String, GoodsInCart>> set1 = shoppingCart.entrySet();

       for (Entry<String, GoodsInCart> s : set1) {

           System.out.println("总金额为:"

                   + (shoppingCart.get(s).getGoods().getPrice())

                   * (shoppingCart.get(s).getNum()));

           set1.clear();//清空购物车

       }

   }

********************************************************************

package com.imooc.goods;


import java.util.Scanner;

import java.util.Set;


public class TestDemo {


public static void main(String[] args) {

Goods one = new Goods("goods001", "水杯", 56, "不锈钢水杯");

Goods two = new Goods("goods002", "饮水机", 299, "带净化功能的饮水机");

Goods three = new Goods("goods003", "笔记本电脑", 4999, "15寸笔记本");

Goods four = new Goods("goods0014", "手机", 230, "android手机");

int m;

Scanner sc = new Scanner(System.in);

primary(); // 主菜单显示

GoodsManage goodsManage = new GoodsManage();

ShoppingCart shoppingCart = new ShoppingCart();


while (true) {

try {

m = sc.nextInt(); // 主菜单选择

switch (m) {

// 商品管理

case 1:

goodsManage();

// 商品管理选择

boolean b = true;

while (b) {

try {

int n = sc.nextInt(); // 副菜单选择

switch (n) {

// 商品信息导入

case 1:

System.out.println("商品信息导入中......");

goodsManage.importGoods();

System.out.println("信息导入成功!");

goodsManage();

break;

// 显示所有商品信息

case 2:

System.out.println("显示所有商品信息");

System.out.println("所有商品信息为:");

goodsManage.displayAllGoods();

goodsManage();

break;

// 返回上一级菜单

case 9:

primary(); // 主菜单显示

b = false;

// m=sc.nextInt();

break;

default:

System.out.println("没有该选项,请重新选择!");

break;

}

} catch (Exception e) {

System.out.println("请输入正确选项:");

sc.next();

}

}

break;


// 购物车管理

case 2:

cartManage();

b = true;

while (b) {

try {

int n = sc.nextInt(); // 副菜单选择

switch (n) {

// 添加商品到购物车

case 1:

System.out.println("添加商品到购物车");

goodsManage.displayAllGoods(); // 显示所有商品信息

shoppingCart.addGoodsToCart(goodsManage);

cartManage(); // 返回购物车管理界面

break;

// 修改购物车中的商品数量

case 2:

System.out.println("修改购物车中的商品数量");

shoppingCart.updateNumInCart();

cartManage(); // 返回购物车管理界面

break;

// 显示购物车中的所有商品信息

case 3:

System.out.println("购物车中的所有商品信息为:");

shoppingCart.displayAllInCart();

cartManage(); // 返回购物车管理界面

break;

// 结算

case 4:

System.out.println("结算:");

shoppingCart.settleAccount();

cartManage(); // 返回购物车管理界面

break;

// 返回上一级菜单

case 9:

primary(); // 主菜单显示

b = false;

// m=sc.nextInt();

break;

default:

System.out.println("没有该选项,请重新选择!");

break;

}

} catch (Exception e) {

System.out.println("请输入正确选项:");

sc.next();

}

}

break;

case 0:

System.exit(0);

default:

System.out.println("没有该选项,请重新选择!");

break;

}

} catch (Exception e) {

System.out.println("请输入正确选项:");

sc.next();

}

}

}


// 主菜单显示

public static void primary() {

System.out.println("************************************************\n");

System.out.println("               **主菜单**");

System.out.println("               1--商品管理");

System.out.println("               2--购物车");

System.out.println("               0--退出");

System.out.println("************************************************\n");

}


// 商品管理

public static void goodsManage() {

System.out.println("************************************************\n");

System.out.println("               **商品管理**");

System.out.println("               1--商品信息导入");

System.out.println("               2--显示所有商品信息");

System.out.println("               9--返回上一级菜单");

System.out.println("************************************************\n");

}


// 购物车管理

public static void cartManage() {

System.out.println("************************************************\n");

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("************************************************\n");

}


}


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

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

2回答
好帮手慕珊 2018-03-21 09:21:28
for (Entry<String, GoodsInCart> s : set1) {
           System.out.println("总金额为:"
                   + (shoppingCart.get(s).getGoods().getPrice())
                   * (shoppingCart.get(s).getNum()));
           set1.clear();//清空购物车
       }

你把set1.clear()写到for循环的外面试试,如果还有问题,把代码贴全吧,便于调试。祝学习愉快!

好帮手慕雪 2018-03-19 19:28:02

你到哪一步输入的4,执行到哪个switch中?你把错误信息输出一下。别在发生异常时只System.out.println("请输入正确选项:");以便查找代码跟踪问题。祝:学习愉快

  • 提问者 慕神7119415 #1
    java.lang.NullPointerException at com.imooc.goods.ShoppingCart.settleAccount(ShoppingCart.java:105) at com.imooc.goods.TestDemo.main(TestDemo.java:94) 结算: 请输入正确选项:
    2018-03-20 21:35:14
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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