課程
/后端開(kāi)發(fā)
/Java
/Java入門(mén)第三季
代碼我放到下面去了
為什么執(zhí)行到p1.cards.add(c1);就空指針異常了?
謝謝,求解答
2016-09-29
源自:Java入門(mén)第三季 7-1
正在回答
理論上邏輯也沒(méi)啥錯(cuò),你看看是不是eclipse抽風(fēng)了,這樣應(yīng)該是可以的,邏輯上是沒(méi)啥問(wèn)題,或者你用dubug調(diào)試一下,如果實(shí)在不行,再回復(fù)我吧,可以一起找錯(cuò)誤
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集合是沒(méi)有g(shù)et方法的,你放進(jìn)去是取不到值得,所以一直都是null
K_Muxs 提問(wèn)者
qq_倔強(qiáng)人生_0 回復(fù) K_Muxs 提問(wèn)者
K_Muxs 提問(wèn)者 回復(fù) qq_倔強(qiáng)人生_0
qq_什么亡魂溺海沒(méi)有跳海實(shí)在_03283094 回復(fù) K_Muxs 提問(wèn)者
set集合是沒(méi)有g(shù)et的方法
?p1.cards.add(c1);//執(zhí)行到這里就報(bào)空指針異常
??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);
這里錯(cuò)了,在存入集合以后是不能怎么取出來(lái)的
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;??//沒(méi)有洗牌的序列 ?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("==========創(chuàng)建撲克牌=========="); ??System.out.println("==========創(chuàng)建撲克牌成功=========="); ?} ?//利用循環(huán)把添加的牌打印出來(lái) ?public?void?showCard()?{ ??int?size?=?cardsToSelect.size(); ??System.out.println("==========添加了如下?lián)淇伺?========="); ??for?(int?i?=?0;?i?<?size;?i++)?{ ???System.out.print(cardsToSelect.get(i).type ?????+?cardsToSelect.get(i).num?+?","); ??} ??System.out.println(); ?} ? ?//創(chuàng)建兩個(gè)玩家 ?public?void?creatPlayer()?{ ??while?(true)?{ ???try?{ ????System.out.println("輸入第一個(gè)玩家的ID:"); ????p1.id?=?input.nextInt(); ????System.out.println("輸入第一個(gè)玩家的姓名:"); ????p1.name?=?input.next();?? ????System.out.println("輸入第二個(gè)玩家的ID:"); ????p2.id?=?input.nextInt(); ????System.out.println("輸入第二個(gè)玩家的姓名:"); ????p2.name?=?input.next(); ????break; ???}?catch?(Exception?e)?{ ????System.out.println("輸入有誤,請(qǐng)重試"); ????input?=?new?Scanner(System.in); ???} ??} ??System.out.println("歡迎玩家:"+p1.name+","+p2.name); ?} ?public?void?washAndGetCard()?{ ??int?size?=?cardsToSelect.size();//獲得cardsToSelect序列的長(zhǎng)度 ??List<Card>?washedList?=?new?ArrayList<Card>();//生成一個(gè)新的序列存放無(wú)序的牌 ??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);));//利用生成隨機(jī)數(shù)在原本的序列中隨機(jī)抽取不同的牌添加到新的序列中去 ??} ??Card?c1=washedList.get(0);//因?yàn)閣ashedList里面的牌是無(wú)序的 ??Card?c2=washedList.get(1);//所以直接取前四張牌 ??Card?c3=washedList.get(2); ??Card?c4=washedList.get(3); ??p1.cards.add(c1);//執(zhí)行到這里就報(bào)空指針異常 ??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類(lèi) 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類(lèi) 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是一個(gè)我存放無(wú)序撲克牌的序列,檢查過(guò)了是可以的。
我用get()方法把前四張牌取出來(lái),添加到玩家的Set集里面去
p1.cards.add(c1);
為什么執(zhí)行到這一步就報(bào)異常 空指針異常?
舉報(bào)
Java中你必須懂得常用技能,不容錯(cuò)過(guò)的精彩,快來(lái)加入吧
2 回答撲克牌游戲
1 回答撲克牌游戲出現(xiàn)中文亂碼
4 回答簡(jiǎn)易撲克牌游戲代碼
5 回答簡(jiǎn)易撲克牌游戲程序!
3 回答撲克牌游戲,寫(xiě)的有點(diǎn)多了
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2016-09-30
理論上邏輯也沒(méi)啥錯(cuò),你看看是不是eclipse抽風(fēng)了,這樣應(yīng)該是可以的,邏輯上是沒(méi)啥問(wèn)題,或者你用dubug調(diào)試一下,如果實(shí)在不行,再回復(fù)我吧,可以一起找錯(cuò)誤
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集合是沒(méi)有g(shù)et方法的,你放進(jìn)去是取不到值得,所以一直都是null
2016-09-30
set集合是沒(méi)有g(shù)et的方法
2016-09-30
?p1.cards.add(c1);//執(zhí)行到這里就報(bào)空指針異常
??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);
?}
這里錯(cuò)了,在存入集合以后是不能怎么取出來(lái)的
2016-09-29
2016-09-29
washedList是一個(gè)我存放無(wú)序撲克牌的序列,檢查過(guò)了是可以的。
我用get()方法把前四張牌取出來(lái),添加到玩家的Set集里面去
p1.cards.add(c1);
為什么執(zhí)行到這一步就報(bào)異常 空指針異常?