空指针异常,我想不出能怎么办了。。。

空指针异常,我想不出能怎么办了。。。

package com.imooc.goods;
import java.util.Scanner;

public class Test {

	public static void main(String[] args) {
		 //实例化4个商品对象
        Goods a=new Goods("S0001","洗衣机",1500.00,"洗衣机可洗衣服");
        Goods b=new Goods("S0002","电脑",12000.00,"电脑可以上网");
        Goods c=new Goods("S0003","空调",4000.00,"开空调很凉快");
        Goods d=new Goods("S0004","冰箱",8000.00,"冰箱可以存储食物");
		GoodsManage gm=new GoodsManage();;
		ShoppingCart sc=new ShoppingCart();
		Scanner s=new Scanner(System.in);
		boolean flag=false;
		int n=0;
		while(flag==false){
			System.out.println("***********************************");
			System.out.println("                主菜单                                              ");
			System.out.println("              1-商品管理                                          ");
			System.out.println("              2-购物车                                              ");
			System.out.println("              0-退出                                                  ");
			System.out.println("***********************************");
			n=s.nextInt();
			flag=true;
			switch(n){
				case 1:
				while(true){
					System.out.println("***********************************");
					System.out.println("              商品管理                                                ");
					System.out.println("            1-商品信息导入                                         ");
					System.out.println("           	2-显示所有商品信息                                  ");
					System.out.println("            9-返回上一级菜单                                     ");
					System.out.println("***********************************");
					n=s.nextInt();
					switch(n){
					case 1: gm.importGoods();
						break;
					case 2:gm.displayAllGoods();
						break;
					}
					if(n==9){
						flag=false;
						break;
					}
				}
				break;
				case 2:while(flag==true){
					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("***********************************");
					n=s.nextInt();
					switch(n){
					case 1:sc.addGoodsToCart(gm);
						break;
					case 2:sc.updateNumInCart();
						break;
					case 3:sc.displayAllInCart();
						break;
					case 4:sc.settleAccount();
						break;
					}
					if(n==9){
						flag=false;
						break;
					}
				}
				break;
				case 0:
					System.out.println("退出!");
					break;
			}
		}
		
	}

}


package com.imooc.goods;

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

/**
 * 商品管理类,属性为存放商品的容器(goodsSet),Set类型
 * @author idea
 *
 */
public class GoodsManage {
	private Set<Goods> goods;//超市系统中的商品
	public Set<Goods> getGoods() {
		return goods;
	}
	public void setGoods(Set<Goods> goods) {
		this.goods = goods;
	}
	public GoodsManage(){}//无参构造
	public GoodsManage(Set<Goods> goods){
		this.setGoods(goods);
	}
	Set<Goods> set=new HashSet<Goods>();
	//商品信息导入方法
	public void importGoods(){
		 	Goods a=new Goods("S0001","洗衣机",1500.00,"洗衣机可洗衣服");
	        Goods b=new Goods("S0002","电脑",12000.00,"电脑可以上网");
	        Goods c=new Goods("S0003","空调",4000.00,"开空调很凉快");
	        Goods d=new Goods("S0004","冰箱",8000.00,"冰箱可以存储食物");
	        set.add(a);
	        set.add(b);
	        set.add(c);
	        set.add(d);
		System.out.println("商品信息导入成功!");
	}
	//显示商品信息方法
	public void displayAllGoods(){
			Iterator<Goods> it=set.iterator();
			while(it.hasNext()){
				System.out.println(it.next());
		}
	}
}



package com.imooc.goods;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;
/**
 * 购物车管理类
 * @author idea
 *
 */
public class ShoppingCart {
	private Map<String, GoodsInCart> shoppingCart;//购物车中的商品
	public Map<String, GoodsInCart> getShoppingCart() {
		return shoppingCart;
	}

	public void setShoppingCart(Map<String,GoodsInCart> shoppingCart) {
		this.shoppingCart = shoppingCart;
	}
	public ShoppingCart(){}
	public ShoppingCart(Map<String,GoodsInCart> shoppingCart){
		this.setShoppingCart(shoppingCart);
	}
	
	Map<String,GoodsInCart> shoppingCart1=new HashMap<String,GoodsInCart>();
	Scanner scanner=new Scanner(System.in);
	/**
	 * 通过商品编号找到对应的要购买的商品
	 * @param gm
	 */
	public void addGoodsToCart(GoodsManage gm){//添加商品到购物车
		Set<Goods> set=gm.getGoods();//將所有商品存入集合中
		String str=null;
		boolean flag=false;
		Goods goods=null;
		//如果未导入商品列表则提示导入
		if(gm.getGoods().size()==0){
			System.out.println("请先导入商品列表!");
		}else{
			gm.displayAllGoods();//已导入则列出商品列表
			for(Goods o:set){
				System.out.println("请输入要购买的商品的编号:");
				str=scanner.next();
				if(o.getGoodsID().equals(str)){
					flag=true;
					goods=o;
					break;
				}
			}
			if(flag=true){
				System.out.println("请输入该购买的数量:");
				int n=scanner.nextInt();
				GoodsInCart gc=new GoodsInCart(goods,n);
				shoppingCart1.put(str, gc);
			}else{
				System.out.println("没找到该商品!");
			}
		}
	}


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

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

6回答
一叶知秋519 2017-12-22 14:27:37
package com.imooc.goods;
 
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
 
/**
 * 商品管理类,属性为存放商品的容器(goodsSet),Set类型
 * @author idea
 *
 */
public class GoodsManage {
    private Set<Goods> goods;//超市系统中的商品
    public Set<Goods> getGoods() {
        return goods;
    }
    public void setGoods(Set<Goods> goods) {
        this.goods = goods;
    }
    
    public GoodsManage(){
    goods = new HashSet<Goods>();
    }
    
    //无参构造
    public GoodsManage(Set<Goods> goods){
        this.setGoods(goods);
    }
    Set<Goods> set=new HashSet<Goods>();
    //商品信息导入方法
    public void importGoods(){
           Goods a=new Goods("S0001","洗衣机",1500.00,"洗衣机可洗衣服");
            Goods b=new Goods("S0002","电脑",12000.00,"电脑可以上网");
            Goods c=new Goods("S0003","空调",4000.00,"开空调很凉快");
            Goods d=new Goods("S0004","冰箱",8000.00,"冰箱可以存储食物");
            set.add(a);
            set.add(b);
            set.add(c);
            set.add(d);
        System.out.println("商品信息导入成功!");
    }
    //显示商品信息方法
    public void displayAllGoods(){
            Iterator<Goods> it=set.iterator();
            while(it.hasNext()){
                System.out.println(it.next());
        }
    }
}

你先把这两个类覆盖一下,看是不是还有空指针。祝学习愉快

一叶知秋519 2017-12-22 14:26:09
package com.imooc.goods;
import java.util.Scanner;
 
public class Test {
 
    public static void main(String[] args) {
         //实例化4个商品对象
        Goods a=new Goods("S0001","洗衣机",1500.00,"洗衣机可洗衣服");
        Goods b=new Goods("S0002","电脑",12000.00,"电脑可以上网");
        Goods c=new Goods("S0003","空调",4000.00,"开空调很凉快");
        Goods d=new Goods("S0004","冰箱",8000.00,"冰箱可以存储食物");
        GoodsManage gm=new GoodsManage();;
        ShoppingCart sc=new ShoppingCart();
        Scanner s=new Scanner(System.in);
        boolean flag=false;
        int n=0;
        while(flag==false){
            System.out.println("***********************************");
            System.out.println("                主菜单                                              ");
            System.out.println("              1-商品管理                                          ");
            System.out.println("              2-购物车                                              ");
            System.out.println("              0-退出                                                  ");
            System.out.println("***********************************");
            n=s.nextInt();
            flag=true;
            switch(n){
                case 1:
                while(true){
                    System.out.println("***********************************");
                    System.out.println("              商品管理                                                ");
                    System.out.println("            1-商品信息导入                                         ");
                    System.out.println("             2-显示所有商品信息                                  ");
                    System.out.println("            9-返回上一级菜单                                     ");
                    System.out.println("***********************************");
                    n=s.nextInt();
                    switch(n){
                    case 1: gm.importGoods();
                        break;
                    case 2:gm.displayAllGoods();
                        break;
                    }
                    if(n==9){
                        flag=false;
                        break;
                    }
                }
                break;
                case 2:while(flag==true){
                    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("***********************************");
                    n=s.nextInt();
                    switch(n){
                    case 1:sc.addGoodsToCart(gm);
                        break;
//                    case 2:sc.updateNumInCart();
//                        break;
//                    case 3:sc.displayAllInCart();
//                        break;
//                    case 4:sc.settleAccount();
//                        break;
                    }
                    if(n==9){
                        flag=false;
                        break;
                    }
                }
                break;
                case 0:
                    System.out.println("退出!");
                    break;
            }
        }
         
    }
 
}

这是我调试的你的代码,没有出现空指针。你试下

一叶知秋519 2017-12-22 13:39:44

你好,是这样的:GoodsManage类中,构造方法改为这样,测试类不变。

public GoodsManage(){
    goods = new HashSet<Goods>();
}


  • 提问者 高为砚 #1
    真的,不行。。。
    2017-12-22 13:42:00
一叶知秋519 2017-12-22 09:58:19

你的gm是一个空对象,应该在它的无参构造中,增加:goods = new HashSet<Goods>(); 。如果还有问题,可以再次提问。祝学习愉快~

  • 提问者 高为砚 #1
    还是不行。。。gm还是一个空对象,如果不在主方法中用GoodsManage gm=new GoodsManage();生成一个GoodsManage对象,就无法用调用GoodsManage中的方法,并且在第60行case 1:sc.addGoodsToCart(gm);处也要用到该对象gm。咋办?我快绝望了
    2017-12-22 12:56:38
  • 把定义的set赋值给goods?
    2017-12-23 01:51:33
提问者 高为砚 2017-12-21 19:46:29
Tender10 2017-12-21 19:37:09

你可以将具体的错误信息也贴出来嘛,便于更精确的帮助你解决问题。

  • 提问者 高为砚 #1
    就是提示上面第60行空指针异常
    2017-12-21 19:39:45
  • 提问者 高为砚 #2
    在第60行case 1:sc.addGoodsToCart(gm);处提示空指针异常
    2017-12-21 19:48:36
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星

相似问题

登录后可查看更多问答,登录/注册

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

在线咨询

领取优惠

免费试听

领取大纲

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