課程
/后端開發
/Java
/Java入門第三季
代碼我放到下面去了
為什么執行到p1.cards.add(c1);就空指針異常了?
謝謝,求解答
2016-09-29
源自:Java入門第三季 7-1
正在回答
理論上邏輯也沒啥錯,你看看是不是eclipse抽風了,這樣應該是可以的,邏輯上是沒啥問題,或者你用dubug調試一下,如果實在不行,再回復我吧,可以一起找錯誤
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
K_Muxs 提問者
qq_倔強人生_0 回復 K_Muxs 提問者
K_Muxs 提問者 回復 qq_倔強人生_0
qq_什么亡魂溺海沒有跳海實在_03283094 回復 K_Muxs 提問者
set集合是沒有get的方法
?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);
這里錯了,在存入集合以后是不能怎么取出來的
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(){ ?? ?} }
washedList是一個我存放無序撲克牌的序列,檢查過了是可以的。
我用get()方法把前四張牌取出來,添加到玩家的Set集里面去
p1.cards.add(c1);
為什么執行到這一步就報異常 空指針異常?
舉報
Java中你必須懂得常用技能,不容錯過的精彩,快來加入吧
2 回答撲克牌游戲
1 回答撲克牌游戲出現中文亂碼
4 回答簡易撲克牌游戲代碼
5 回答簡易撲克牌游戲程序!
3 回答撲克牌游戲,寫的有點多了
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-09-30
理論上邏輯也沒啥錯,你看看是不是eclipse抽風了,這樣應該是可以的,邏輯上是沒啥問題,或者你用dubug調試一下,如果實在不行,再回復我吧,可以一起找錯誤
2016-09-30
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
2016-09-30
set集合是沒有get的方法
2016-09-30
?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);
?}
這里錯了,在存入集合以后是不能怎么取出來的
2016-09-29
2016-09-29
washedList是一個我存放無序撲克牌的序列,檢查過了是可以的。
我用get()方法把前四張牌取出來,添加到玩家的Set集里面去
p1.cards.add(c1);
為什么執行到這一步就報異常 空指針異常?