急求!!在商品添加那层添加了商品,为什么到了购物车层就找不到商品了呢?

急求!!在商品添加那层添加了商品,为什么到了购物车层就找不到商品了呢?

package com.imooc;


import java.util.HashMap;

import java.util.HashSet;

import java.util.Map;

import java.util.Scanner;

import java.util.Set;


/**

 * 测试类

 * @author ZYD

 */

public class TestDemo {

    

boolean flag = true;

Scanner scan = new Scanner(System.in);

GoodsManage gm = new GoodsManage();

ShoppingCart shopc = new ShoppingCart();

Map<String,GoodsInCart> shoppingCart = 

new HashMap<String,GoodsInCart>();

Goods[] goods = {new Goods("goods001","水杯",56.0,"不锈钢水杯"),

new Goods("goods002","饮水机",299.0,"带净化功能的饮水机"),

new Goods("goods003","笔记本电脑",4999.0,"15寸笔记本电脑"),

new Goods("goods004","手机",2300.0,"安卓手机")};

Set<Goods> goodsSet = new HashSet<Goods>();

public static void main(String[] args) {

// TODO Auto-generated method stub

        TestDemo td = new TestDemo();

        td.manage();

}

/**

* 菜单管理方法

*/  

public void manage() {

while(flag) {

System.out.println("************************"+'\n'+

          "        "+"**主菜单**"+'\n'+

          "        "+"1--商品管理"+'\n'+

          "        "+"2--购物车"+'\n'+

          "        "+"0--退出"+'\n'+

          "************************");

TestDemo td = new TestDemo();

System.out.println("请输入对应的数字进行操作:");

//定义k来记录主菜单管理指令

int k = scan.nextInt();

switch(k) {

case 1:

td.goodsManage();

break;

case 2:

td.goodsCartManage();

break;

case 0:

     flag = false;

}

}

}

/**

* 商品管理方法

*/

public void goodsManage() {

for(int i=0;i<goods.length;i++) {

goodsSet.add(goods[i]);

}

while(flag) {

System.out.println("*******************************"+'\n'+

          "            "+"**商品管理**"+'\n'+

          "            "+"1--商品信息导入"+'\n'+

          "            "+"2--显示所有商品"+'\n'+

          "            "+"9--返回上一级菜单"+'\n'+

          "********************************");

System.out.println("请输入对应的数字进行商品管理:");

//定义n来记录商品管理层的指令

int l = 0;

l= scan.nextInt();

switch(l) {

case 1:

gm.setGoodsSet(goodsSet);

gm.importGoods();

break;

case 2:

gm.displayAllGoods();

break;

case 9:

flag = false;

}continue;

}

}

/**

* 购物车管理方法

*/

public void goodsCartManage() {

while(flag) {

// if(gm.getGoodsSet().size()<=0) {

// System.out.println("目前暂无商品,请先导入商品");

// flag = false;

// break;

// } 

System.out.println("*******************************"+'\n'+

          "            "+"**购物车管理**"+'\n'+

          "            "+"1--添加商品到购物车"+'\n'+

          "            "+"2--修改购物车中的商品数量"+'\n'+

          "            "+"3--显示购物车中所有商品信息"+'\n'+

          "            "+"4--结算"+'\n'+

          "            "+"8--返回上一级菜单"+'\n'+

          "********************************");

System.out.println("请输入对应的数字对购物车进行管理:");

         //定义n作为购物车管理的指令

int n = 0;

n = scan.nextInt();

switch(n) {

case 1:

gm.displayAllGoods();

System.out.println("请输入要添加的商品的编号:");

String id = scan.next();

System.out.println("请输入要添加的商品的数量:");

int num = scan.nextInt();

for(Goods goods:goodsSet) {

if(goods.getGoodsId().equals(id)) {

GoodsInCart gi = new GoodsInCart(goods,num);

shoppingCart.put(id,gi);

ShoppingCart sp = new ShoppingCart(shoppingCart);

}

}

break;

case 2:

break;

case 3:

shopc.displayAllInCart();

break;

case 4:

break;

case 9:

flag = false;

}continue;

}

}

}


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

        **主菜单**

        1--商品管理

        2--购物车

        0--退出

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

请输入对应的数字进行操作:

1

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

            **商品管理**

            1--商品信息导入

            2--显示所有商品

            9--返回上一级菜单

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

请输入对应的数字进行商品管理:

1

导入成功

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

            **商品管理**

            1--商品信息导入

            2--显示所有商品

            9--返回上一级菜单

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

请输入对应的数字进行商品管理:

2

所有商品的信息为:

商品信息 [编号: goods002, 名称: 饮水机, 价格: 299.0, 描述: 带净化功能的饮水机]

商品信息 [编号: goods004, 名称: 手机, 价格: 2300.0, 描述: 安卓手机]

商品信息 [编号: goods003, 名称: 笔记本电脑, 价格: 4999.0, 描述: 15寸笔记本电脑]

商品信息 [编号: goods001, 名称: 水杯, 价格: 56.0, 描述: 不锈钢水杯]

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

            **商品管理**

            1--商品信息导入

            2--显示所有商品

            9--返回上一级菜单

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

请输入对应的数字进行商品管理:

3

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

            **商品管理**

            1--商品信息导入

            2--显示所有商品

            9--返回上一级菜单

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

请输入对应的数字进行商品管理:

9

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

        **主菜单**

        1--商品管理

        2--购物车

        0--退出

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

请输入对应的数字进行操作:

2

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

            **购物车管理**

            1--添加商品到购物车

            2--修改购物车中的商品数量

            3--显示购物车中所有商品信息

            4--结算

            8--返回上一级菜单

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

请输入对应的数字对购物车进行管理:

1

所有商品的信息为:

请输入要添加的商品的编号:


正在回答

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

3回答

导入商品信息的方法importGoods()中只有一句打印输出“导入成功”的语句,导入商品的代码在哪里呢?建议你再好好检查一下~

  • 慕无忌5903725 提问者 #1
    导入商品不是只要对goodsSet赋值就可以了吗?在测试方法中将Goods[] goods = {new Goods("goods001","水杯",56.0,"不锈钢水杯"), new Goods("goods002","饮水机",299.0,"带净化功能的饮水机"), new Goods("goods003","笔记本电脑",4999.0,"15寸笔记本电脑"), new Goods("goods004","手机",2300.0,"安卓手机")}; goods对象依次放入goodsSet1集合中,然后在执行到导入商品的指令时,执行new GoodsManage.setGoodsSet(goodsSet1);这样不就相当于导入了商品吗?
    2017-12-28 17:40:44
  • 慕无忌5903725 提问者 #2
    在商品管理那一块里,导入商品成功了,执行displayAllGoods()方法也没问题啊。但是到了购物车那一栏的时候,再次调用new GoodsManage().getGoodsSet(),方法时却又为空了。这是为什么啊?
    2017-12-28 17:43:29
  • THappy 回复 提问者 慕无忌5903725 #3
    试试将菜单管理方法manage()中TestDemo td = new TestDemo();语句删掉,case 1中直接写goodsManage(); case 2中直接写goodsCartManage();来调用这两个方法, 如果每次循环都会创建一个新的TestDemo类型的td对象可能导致对象重置。
    2017-12-28 18:31:56
提问者 慕无忌5903725 2017-12-28 16:39:50

package com.imooc;


import java.util.HashSet;

import java.util.Set;


/**

 * 商品管理类

 * @author ZYD

 */

public class GoodsManage {

/**

* 存放商品的容器

*/

private Set<Goods> goodsSet;

    

public GoodsManage() {

this.goodsSet = new HashSet<Goods>();

}

/**

* 导入商品信息的方法

*/

public void importGoods() {

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

}

/**

* 显示所有商品信息的方法

*/

public void displayAllGoods() {

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

for (Goods goods : goodsSet) {

System.out.println(goods.toString());

}

}


public Set<Goods> getGoodsSet() {

return goodsSet;

}


public void setGoodsSet(Set<Goods> goodsSet) {

this.goodsSet = goodsSet;

}


}


THappy 2017-12-28 16:22:05

你在添加购物车时添加到了测试类中通过Map<String,GoodsInCart> shoppingCart = new HashMap<String,GoodsInCart>();创建的shoppingCart中,而没有添加到购物车类的shoppingCart属性中,不清楚你的displayAllInCart()方法怎么写的,是不是在displayAllInCart()中获取的是购物车中的shoppingCart中的商品呀?建议把代码都贴出来,便于更好地帮你解决问题~


  • 提问者 慕无忌5903725 #1
    不是呀,我说的是商品导入成功了,但是在购物车那一栏里再次调用时,商品信息又为空了
    2017-12-28 16:38:45
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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