扑克牌游戏关于玩家获得手牌出现空指针异常

来源:7-1 简易扑克牌游戏

K_Muxs

2016-09-29 23:21

代码我放到下面去了

为什么执行到p1.cards.add(c1);就空指针异常了?

谢谢,求解答

写回答 关注

6回答

  • qq_倔強人生_0
    2016-09-30 10:43:16
    已采纳

    理论上逻辑也没啥错,你看看是不是eclipse抽风了,这样应该是可以的,逻辑上是没啥问题,或者你用dubug调试一下,如果实在不行,再回复我吧,可以一起找错误


  • qq_倔強人生_0
    2016-09-30 13:00:17

    package com.poker;

     

    import java.util.HashSet;

    import java.util.Set;

     

    public class Player {

      

     public String name;

     public int id;

     public Set<Card> cards;

      

     public  Player(int id,String name){

      this.id=id;

      this.name=name;

      this.cards = new HashSet<Card>();

     }

     public Player(){

       

     }

    }

    set集合是没有get方法的,你放进去是取不到值得,所以一直都是null

    qq_什么亡... 回复K_Muxs

    因为你的代码是按照你自己的思维写的 你读的时候感觉顺理成章 你读别人的代码的时候可能感觉不到别人的思路 只能看到代码 所以感觉吃力 我也是这样 说到底还是打少了 哈哈

    2016-12-13 14:47:31

    共 4 条回复 >

  • qq_倔強人生_0
    2016-09-30 12:49:50

    set集合是没有get的方法

  • qq_倔強人生_0
    2016-09-30 10:59:26

     p1.cards.add(c1);//执行到这里就报空指针异常

      p2.cards.add(c2);

      p1.cards.add(c3);

      p2.cards.add(c4);

      System.out.println("玩家"+p1.name+"获得牌:"+c1.type+c1.num+","+c3.type+c3.num);

      System.out.println("玩家"+p2.name+"获得牌:"+c2.type+c2.num+","+c4.type+c4.num);

     }

    这里错了,在存入集合以后是不能怎么取出来的

    qq_倔強人... 回复K_Muxs

    p1.cards.add(c1);//执行到这里就报空指针异常 p2.cards.add(c2); p1.cards.add(c3); p2.cards.add(c4); 你已经把取出来的放进了set集合cards里面了,所以一直都是null;

    2016-09-30 13:03:29

    共 3 条回复 >

  • K_Muxs
    2016-09-29 23:45:36
    package com.poker;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.Random;
    import java.util.Scanner;
    
    public class Playing {
     
     public List<Card> cardsToSelect;  //没有洗牌的序列
     public List<Card> washedList;  //洗牌后的序列
     public Scanner input = new Scanner(System.in);
     public Random random = new Random();
     Player p1 = new Player();
     Player p2 = new Player();
    
     public Playing() {
      this.cardsToSelect = new ArrayList<Card>();
     }
    
     
     //把牌添加到cardsToSelect序列中
     public void addCard() {
      Card[] heitao = { new Card("黑桃", "A"), new Card("黑桃", "2"),
        new Card("黑桃", "3"), new Card("黑桃", "4"), new Card("黑桃", "5"),
        new Card("黑桃", "6"), new Card("黑桃", "7"), new Card("黑桃", "8"),
        new Card("黑桃", "9"), new Card("黑桃", "10"), new Card("黑桃", "J"),
        new Card("黑桃", "Q"), new Card("黑桃", "K") };
      Card[] hongtao = { new Card("红桃", "A"), new Card("红桃", "2"),
        new Card("红桃", "3"), new Card("红桃", "4"), new Card("红桃", "5"),
        new Card("红桃", "6"), new Card("红桃", "7"), new Card("红桃", "8"),
        new Card("红桃", "9"), new Card("红桃", "10"), new Card("红桃", "J"),
        new Card("红桃", "Q"), new Card("红桃", "K") };
      Card[] meihua = { new Card("梅花", "A"), new Card("梅花", "2"),
        new Card("梅花", "3"), new Card("梅花", "4"), new Card("梅花", "5"),
        new Card("梅花", "6"), new Card("梅花", "7"), new Card("梅花", "8"),
        new Card("梅花", "9"), new Card("梅花", "10"), new Card("梅花", "J"),
        new Card("梅花", "Q"), new Card("梅花", "K") };
      Card[] fangkuai = { new Card("方块", "A"), new Card("方块", "2"),
        new Card("方块", "3"), new Card("方块", "4"), new Card("方块", "5"),
        new Card("方块", "6"), new Card("方块", "7"), new Card("方块", "8"),
        new Card("方块", "9"), new Card("方块", "10"), new Card("方块", "J"),
        new Card("方块", "Q"), new Card("方块", "K") };
      cardsToSelect.addAll(Arrays.asList(heitao));
      cardsToSelect.addAll(Arrays.asList(hongtao));
      cardsToSelect.addAll(Arrays.asList(meihua));
      cardsToSelect.addAll(Arrays.asList(fangkuai));
      System.out.println("==========创建扑克牌==========");
      System.out.println("==========创建扑克牌成功==========");
     }
    
     //利用循环把添加的牌打印出来
     public void showCard() {
      int size = cardsToSelect.size();
      System.out.println("==========添加了如下扑克牌==========");
      for (int i = 0; i < size; i++) {
       System.out.print(cardsToSelect.get(i).type
         + cardsToSelect.get(i).num + ",");
      }
      System.out.println();
     }
     
     //创建两个玩家
     public void creatPlayer() {
      while (true) {
       try {
        System.out.println("输入第一个玩家的ID:");
        p1.id = input.nextInt();
        System.out.println("输入第一个玩家的姓名:");
        p1.name = input.next();  
        System.out.println("输入第二个玩家的ID:");
        p2.id = input.nextInt();
        System.out.println("输入第二个玩家的姓名:");
        p2.name = input.next();
        break;
       } catch (Exception e) {
        System.out.println("输入有误,请重试");
        input = new Scanner(System.in);
       }
      }
      System.out.println("欢迎玩家:"+p1.name+","+p2.name);
     }
    
     public void washAndGetCard() {
      int size = cardsToSelect.size();//获得cardsToSelect序列的长度
      List<Card> washedList = new ArrayList<Card>();//生成一个新的序列存放无序的牌
      for (int i = 0; i < size; i++) {
       Card temp = new Card();
       do {
        temp = cardsToSelect.get(random.nextInt(size
       } while (washedList.contains(temp));
       washedList.add(temp);));//利用生成随机数在原本的序列中随机抽取不同的牌添加到新的序列中去
      }
      Card c1=washedList.get(0);//因为washedList里面的牌是无序的
      Card c2=washedList.get(1);//所以直接取前四张牌
      Card c3=washedList.get(2);
      Card c4=washedList.get(3);
      p1.cards.add(c1);//执行到这里就报空指针异常
      p2.cards.add(c2);
      p1.cards.add(c3);
      p2.cards.add(c4);
      System.out.println("玩家"+p1.name+"获得牌:"+c1.type+c1.num+","+c3.type+c3.num);
      System.out.println("玩家"+p2.name+"获得牌:"+c2.type+c2.num+","+c4.type+c4.num);
     }
    
     public static void main(String[] args) {
    
      Playing t = new Playing();
      t.addCard();
      t.showCard();
      t.creatPlayer();
      t.washAndGetCard();
      
     }
    }
    //Card类
    
    package com.poker;
    
    public class Card {
    
     public String num;
     public String type;
    
     public Card(String type, String num) {
      this.num = num;
      this.type = type;
     }
     
     public Card(){
      
     }
    }
    //Player类
    
    package com.poker;
    
    import java.util.HashSet;
    import java.util.Set;
    
    public class Player {
     
     public String name;
     public int id;
     public Set<Card> cards;
     
     public  Player(int id,String name){
      this.id=id;
      this.name=name;
      this.cards = new HashSet<Card>();
     }
     public Player(){
      
     }
    }


  • K_Muxs
    2016-09-29 23:28:52

    washedList是一个我存放无序扑克牌的序列,检查过了是可以的。

    我用get()方法把前四张牌取出来,添加到玩家的Set集里面去

    p1.cards.add(c1);

    为什么执行到这一步就报异常 空指针异常?

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题