应该没什么问题,老师看一下!!

应该没什么问题,老师看一下!!

package threehomework;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class GoodsManage {
	//存放商品Goods的容器Set类型
	private Set<Goods> goodsSet = new HashSet<Goods>();
	
	//空构造方法
	public GoodsManage() {
		
	}
	
	//带参构造方法,用于NEW的时候可以给该类进行设置参数
	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() {
		//NEW,GOODS里面的构造创建存储
		Goods goods1=new Goods("goods001","水杯",56.0,"不锈钢水杯");
		Goods goods2=new Goods("goods002","饮水机",299.0,"带净化功能的饮水机");
		Goods goods3=new Goods("goods003","笔记本电脑",4999.0,"15寸笔记本电脑");
		Goods goods4=new Goods("goods004","手机",2300.0,"andriod手机");
		
		//使用SET方法将goods类对象添加到集合GoodsManage类中goodsSet容器当中
		//由于已经创建了Goods的容器,这里就不用再添加一次了!!!
		goodsSet.add(goods1);
		goodsSet.add(goods2);
		goodsSet.add(goods3);
		goodsSet.add(goods4);
		System.out.println("商品信息导入成功");
	};
	
	//显示所有商品信息
	public void displayAllGoods() {
		if(goodsSet.size()==0) {
			System.out.println("商品信息为空,请导入");
		}else {
			Iterator<Goods> it=goodsSet.iterator();
			//使用迭代器显示Good类对象的内容
			while(it.hasNext()) {
				System.out.println(it.next());
			}
		}
		
		
	};
	
}
package threehomework;

import java.util.HashMap;
//import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;

//购物车类
public class ShoppingCart {
	//创建MAP集合购物车类,用于存储货物信息,String是货物编号,GoodsInCart是货物信息类
	public Map<String,GoodsInCart> shoppingCart=new HashMap<>();
	
	//空构造方法
	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;
	};
	
	//定义外部键盘输入和存储数据到MAP集合Key和value的方法
	static Scanner sc=new Scanner(System.in);
	
	//添加商品到购物车的方法
	//将GoodsMange创建对象gm,并创建addGoodsToCart方法,把gm作为数据存储到addGoodsToCart方法中
	public void addGoodsToCart(GoodsManage gm) {
		if(gm.getGoodsSet().size()==0) {//利用GoodsManage对象gm调取getGoodsSet方法再.size来检查是否有内容,goodSet是存储Goods里内容的容器
			System.out.println("请先导入数据!");
		}else {
			boolean flag = false;
			Goods go = null;//用于存储商品类信息
			System.out.println("所有的商品信息为:");
			gm.displayAllGoods();
			System.out.println("请输入想购买的商品编号:");
			String goodsId = null;
			goodsId = sc.next();
			//取得goods内容(简写)
			Set<Goods> goods = gm.getGoodsSet();//把GoodsManage里的GooodSet容器利用gm对象利用Set方法赋值给goods
			//遍历Goods里的货物信息
			for(Goods gInfo:goods) {//遍历goods里面的属性
				if(gInfo.getGoodsId().equals(goodsId)) {//如果输入的goodsId和商品信息里的ID一样
					flag = true;
					go = gInfo;//把货物信息存储到go里面
					break;
				}
			}
			if(flag==true) {//如果flag判断都为真则输入商品数量
				System.out.println("请输入购买商品的数量:");
                int num = 0;
				num = sc.nextInt();
                GoodsInCart gic = new GoodsInCart(go, num);//实例化货物信息并存储参数
                shoppingCart.put(goodsId, gic);//将key值ID和商品及商品数量存储到shoppingCart的Map集合中
			}else {
				System.out.println("无此商品编号!请重新输入");
			}
		}
	};
	
	// 显示购物车中的所有商品
    public void displayAllInCart() {
    	//创建entrySet方法将shoppingCart的值赋值给set
        Set<Entry<String, GoodsInCart>> set = shoppingCart.entrySet();
        if (set.size() == 0) {
            System.out.println("您还没有添加任何商品,快去挑选吧");
        } else {
            for (Entry<String, GoodsInCart> entry : set) {
                System.out.println(entry.getValue().getGood() + "," + entry.getValue().getNum() + "个");
            }
        }
    }
	
    // 修改购物车中商品的数量
    public void updateNumInCart() {
    	System.out.println("请输入要修改的商品编号:");
    	String goodsId=sc.next();
    	//通过keySet的方法遍历找到ShoppingCart存储的Map数据
    	Set<String> set=shoppingCart.keySet();
    	//遍历让shoppingCart的Map集合的值为set,并遍历化得到str
    	for(String str:set) {
    		//如果输入的ID号和shopping里的值相等,则开始修改
    		if(str.equals(goodsId)) {
    			System.out.println("请输入新的商品数量");
                int num = sc.nextInt();
                	if(num==0) {
                		shoppingCart.remove(str);
                        System.out.println("由于商品数量为零,所以移除该商品。");
                	}else {
                		shoppingCart.get(str).setNum(num);
                		/*从shoppingCart集合取得已经判断相等的这个ID,
                		由于shoppingCart包含了GoodsInCart里的num赋值方法,所以利用该方法将键盘输入的num值代入赋值替换*/
//                		Iterator<GoodsInCart> it=shoppingCart.values().iterator();
//                		while(it.hasNext()) {
//                			System.out.println(it.next());
//                		}
                	}	
    		}else {//由于不是系统错误,所以这里不用写try...catch
    			System.out.println("购物车中没有该商品!");
    		}
    	}
    }
	
    //结算
    public void settleAccounts() {
    	int sum=0;
    	Set<Entry<String, GoodsInCart>> set = shoppingCart.entrySet();
    	for (Entry<String, GoodsInCart> entry : set) {
            sum=(int) (sum+((entry.getValue().getNum())*(entry.getValue().getGood().getPrice())));
        }
    	System.out.println("总金额为:"+sum);
    	shoppingCart.clear();
    }
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}


正在回答

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

4回答

您好,在原代码基础上修改如下参考:(结合注释理解)

    // 修改购物车中商品的数量
    public void updateNumInCart() {
    if(shoppingCart.size()!=0) {//判断购物车是否存在商品
    System.out.println("请输入要修改的商品编号:");
    String goodsId=sc.next();
    Set<String> set=shoppingCart.keySet();
    boolean flag = false;//判断是否存在商品,默认为false
    for(String str:set) {
    if(str.equals(goodsId)) {
    System.out.println("请输入新的商品数量");
                int num = sc.nextInt();
                if(num==0) {
                shoppingCart.remove(str);
                        System.out.println("由于商品数量为零,所以移除该商品。");
                        break;//删除成功后,break语句跳出循环
                }else {
                shoppingCart.get(str).setNum(num);
                }
                flag = true;//存在商品,变量为true
    }
    }
    if(flag == false) {//不存在输出提示语句
    System.out.println("购物车中没有该商品!");
    }
    }else {//购物车中不存在商品输出提示语句
    System.out.println("请添加商品!");
    }
    }

祝学习愉快!

提问者 龍彦宏 2018-12-03 11:31:36
    // 修改购物车中商品的数量
    public void updateNumInCart() {
        System.out.println("请输入要修改的商品编号:");
        String goodsId=sc.next();
        Set<Entry<String, GoodsInCart>> set = shoppingCart.entrySet();
        if (set.size() == 0) {
            System.out.println("您还没有添加任何商品,快去挑选吧");
        }else {
            for(Entry<String,GoodsInCart>entry:set) {
                if(entry.getValue().getGood().getGoodsId().equals(goodsId)) {
                	if(entry.getValue().getNum()==0) {
                		shoppingCart.remove(entry.getValue().getNum(),entry.getValue().getGood());
                		System.out.println("由于商品数量为零,所以移除该商品。");
                		break;
                	}else {
                		System.out.println("请输入新的商品数量");
                    	int num = sc.nextInt();
               			shoppingCart.get(entry.getValue().getNum()).setNum(num);
                	}
               	}
            }
        }   
    }

老师,我对hashMap的remove不理解,而且这里写完判断商品为0也删除不了!应该怎么写才对,还有,修改数量这块也一塌糊涂!请老师帮忙修改一下.

  • 提问者 龍彦宏 #1
    代码自己修改了一下,目前卡在设置产品数量这块了,这块不知道怎么写了!? shoppingCart.get(entry.getValue().getNum()).setNum(num); 这么写是不对的,,应该是怎么写?
    2018-12-03 11:45:31
好帮手慕查理 2018-11-30 19:15:59

您好,经查看您的代码在作业中老师已经批复,因此在此处给您老师批复的文档:

【修改购物车中的商品数量】

1.修改商品数量时应该先检测购物车是否存在商品,商品不存在则提示用户购物车为空。与显示购物车中的所有商品方法中的判断相同。

 http://img1.sycdn.imooc.com//climg/5c011b620001987e09150234.jpg

2.不存在该商品时循环输出多次提示信息,存在商品时也会输出多次提示信息。

不能在循环中输出提示信息。可以添加一个变量,初始值为false,当在集合中找到商品时,变量值为true。在循环外判断变量为false时,输出提示信息。

3.修改商品数量为0时报错。

 http://img1.sycdn.imooc.com//climg/5c011b7d0001414707810264.jpg

在循环遍历过程中删除集合元素。如果删除的刚好是循环的最后一个元素没关系,如果删除后还会继续遍历集合就出问题了。

所以调用完remove()方法,可以使用break语句跳出循环。

【结算】

应先判断购物车中是否存在商品,不存在商品则输出提示语句,存在商品时再进行商品结算。与显示购物车中的所有商品方法中的判断相同。

提交作业之后,老师会进行批改,同学可不再问答区进行提问。祝学习愉快!

  • 提问者 龍彦宏 #1
    老师,你说的那个remove不会写....理解不了其意思 public void updateNumInCart() { System.out.println("请输入要修改的商品编号:"); String goodsId=sc.next(); Set<Entry<String, GoodsInCart>> set = shoppingCart.entrySet(); for(Entry<String,GoodsInCart>entry:set) { if(entry.getValue().getGood().getGoodsId().equals(goodsId)) { System.out.println("请输入新的商品数量"); int num = sc.nextInt(); if(num==0) { shoppingCart.remove(entry.getValue().getGood()); System.out.println("由于输入的商品数量为零,所以移除该商品。"); break; }else { shoppingCart.get(entry).setNum(num); } } } }
    2018-12-03 11:01:26
提问者 龍彦宏 2018-11-30 17:09:59
package threehomework;

import java.util.Scanner;

public class TestDemo {
	//封装菜单信息
	public void Menu1() {
        System.out.println("*********************************");
        System.out.println("**主菜单**");
        System.out.println("1--商品管理");
        System.out.println("2--购物车");
        System.out.println("0--退出");
        System.out.println("*********************************");
        System.out.println("请输入对应的数字进行操作:");
    }
  
    public void Menu2() {
        System.out.println("*********************************");
        System.out.println("**商品管理**");
        System.out.println("1--商品信息导入");
        System.out.println("2--显示所有商品信息");
        System.out.println("9--返回上一级菜单");
        System.out.println("*********************************");
        System.out.println("请输入对应的数字对商品进行管理:");
    }
  
    public void Menu3() {
        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("**********************************");
        System.out.println("请输入对应的数字对购物车进行管理");
    } 	
    
    static Scanner input=new Scanner(System.in);
    
	public static void main(String[] args) {
		//定义对象,全局变量
		TestDemo test=new TestDemo();
	    GoodsManage gm=new GoodsManage();
	    ShoppingCart sc=new ShoppingCart();
	    boolean flag=true;
	    int n,m = 0;
	    
	    //实现流程
	    while(flag) {
	    	test.Menu1();
	    	try {
				n=input.nextInt();
			} catch (Exception e1) {
				System.out.println("输入格式错误!请以正确格式输入.");
				input.next();//!这个消化很重要!!!
				continue;
			}
	    	//正式操作,键盘输入n,判断读取方法
	    	switch(n) {
	    		//栏目:商品管理------------------------------------------------------------
	    		case 1:
	    			//为了能用if返回上一级成功必须新建立一个flag1才行
	    			boolean flag1=true;
	    			//while里包含菜单,输入,如果输入放在外面就会造成死循环!!!!!必须要记住
	    			while(flag1) {
	    				test.Menu2();//菜单
		    			try {
							m=input.nextInt();//键盘输入
						} catch (Exception e) {
							System.out.println("请以正确格式输入");
							input.next();
							continue;
						}
		    			//返回
		    			if(m==9) {
	    					flag1=false;
	    					break;
	    				}
	    				switch(m) {
	    					//商品信息导入
	    					case 1:
	    						gm.importGoods();
	    						break;
	    					//显示所有内容
	    					case 2:
	                            gm.displayAllGoods();
	                            break;
	    					default:
	    						System.out.println("请输入有效数字!");
	    				}
	    			}
	    			break;
	    		//栏目:购物车------------------------------------------------------------------
	    		case 2:	
	    			boolean flag2=true;
	    			while(flag2) {
	    				test.Menu3();
	    				m=input.nextInt();
	    				//返回
	    				if(m==9) {
	    					flag1=false;
	    					break;
	    				}
	    				switch(m) {
	    				//添加商品到购物车
	    				case 1:
	    					sc.addGoodsToCart(gm);
	    					break;
	    				//修改购物车中的商品数量
	    				case 2:
	    					sc.updateNumInCart();
	    					break;
	    				//显示购物车中的所有商品信息
	    				case 3:
	    					sc.displayAllInCart();
	    					break;
	    				//结算
	    				case 4:
	    					sc.settleAccounts();
	    					break;
	    				default:
    						System.out.println("请输入有效数字!");
	    				}
	    			}
	    			
	    			break;
	    		//退出程序
	    		case 0:
	    			System.exit(0);
	    			System.out.println("欢迎您下次光临");
	    			break;
	    		default:
					System.out.println("请输入有效数字!");
	    	}
	    }
	}

}

第一页:Goods-商品属性页

1)商品属性:商品编号:goodsId,商品名称:goodsName,商品价格:price,商品描述:goodsDesp;

2)创建带参构造方法,用于GoodsManage实例化对象时候将具体数据存入使用.

3)创建getter和setter方法,getter用于其他页面调取具体数据使用,可用于对比数据或者输出数据使用.

4)创建hashCode方法,用于防止重复数据输入,其中public boolean equals(Object obj){}里面的比对数据方法需要重写.

5)创建toString方法,用于将实例化对象导入具体参数数据时候可以显示出使用.


第二页:GoodsManage-商品管理页

1)创建Set<Goods> goodsSet=new HashSet<Goods>();属性,用于存储具体数据的容器使用.

2)创建空构造和带参构造和getter/setter方法,用于ShoppingCart可以调用商品管理页的容器内容及商品属性页面的属性.

3)创建importGoods方法用于导入数据使用,其中使用Goods goods1=new Goods(参数);进行存储具体数据),以及使用Set容器goodsSet.add(Goods对象);存储数据.

4)创建displayAllGoods方法显示全部内容,这里使用判断if容器goodSet.size()==0则商品为空请导入,else使用迭代器Iterator<Goods> it=goodSet.iterator();遍历具体数据,然后使用while循环输出所有it.next内容.


第三页:GoodsInCart-商品信息页

1)属性:Good goods:用于调取商品页中具体属性,商品数量num:用于后面存储商品数量和修改数量.get(str).setNum(num);其中str是ShoppingCart用keySet方法时候遍历的对象.

2)创建空构造和带参构造和getter/setter方法,用于实例化对象把具体的商品数据和商品数量存储进去.


第四页:ShoppingCart-购物车

1)创建public Map<String,GoodsInCart> shoppingCart=new HashMap<>();属性.用于存储商品信息具体内容.

2)创建空构造和带参构造和getter/setter方法,这次编程用不到.

3)创建键盘输入方法static Scanner sc=new Scanner(System.in);

4)创建public void addGoodsToCart(GoodsManage gm)();带参方法用于测试页面把实例化对象gm的具体参数导入进去sc.addGoodsToCart(gm);

没写完,后面继续补充.....

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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