亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

做完了,問下為什么Poker類默認是Object?。浚?6-47)

我自己轉了下可以用,但是很奇怪Poker.java文件的ArrayList我存的時候是Poker,但是取出來卻是Object需要轉換。

Poker.java

package?kasei;

import?java.util.Map;
import?java.util.HashMap;
import?java.util.List;

public?class?Poker?implements?Comparable<Poker>?{
????public?int?suit;
????public?int?number;
????public?static?Map<Integer,?String>?suits?=?new?HashMap<Integer,?String>()?{
????????{
????????????put(1,?"方片");
????????????put(2,?"梅花");
????????????put(3,?"紅心");
????????????put(4,?"黑桃");
????????}
????};
????public?static?Map<Integer,?String>?numbers?=?new?HashMap<Integer,?String>()?{
????????{
????????????put(2,?"2");
????????????put(3,?"3");
????????????put(4,?"4");
????????????put(5,?"5");
????????????put(6,?"6");
????????????put(7,?"7");
????????????put(8,?"8");
????????????put(9,?"9");
????????????put(10,?"10");
????????????put(11,?"J");
????????????put(12,?"Q");
????????????put(13,?"K");
????????????put(14,?"A");
????????}
????};

????public?Poker()?{
????}

????public?Poker(int?suit,?int?number)?{
????????this.suit?=?suit;
????????this.number?=?number;
????}

????public?static?String?getPokersList(List?pokers){
????????String?print?=?"[";
????????for?(Object?obj?:?pokers)?{
????????????Poker?poker?=?(Poker)?obj;
????????????print?+=?poker.getName()?+?",?";
????????}
????????//?刪除最后一項逗號和空格,替換為]
????????print?=?print.replaceAll(",?$",?"]");
????????return?print;
????}

????public?String?getName()?{
????????return?suits.get(suit)?+?numbers.get(number);
????}

????public?int?getSize()?{
????????return?this.number?*?10?+?this.suit;
????}

????/**
?????*?降序需要-1?t>o
?????*/
????public?int?compareTo(Poker?o)?{
????????if?(this.getSize()?>?o.getSize())?{
????????????return?-1;
????????}?else?{
????????????return?1;
????????}
????}

}

Initail.java

package?kasei;

/**
?*?撲克牌游戲
?*?1.?創建撲克牌
?*?1.1?四個花色黑桃、紅桃、梅花、方片
?*?1.2?十三種點數2-10,?J,?Q,?K,?A
?*?2.?兩名玩家
?*?2.1?要有ID、姓名、手牌(撲克牌集合)
?*?2.2?手牌2張
?*?3.?洗牌
?*?3.1?打亂之前撲克牌順序
?*?4.?發牌
?*?4.1?從第一張開始,一人一張發給每個玩家
?*?4.2?每人發兩張
?*?5.?比大小
?*?5.1?取玩家手牌中最大一張進行比較
?*?5.2?先比點數,點數相同則比花色
?*/

/**
?*?UML
?*?1.?Game
?*??????pokers
?*??????players
?*??????playerNum
?*??????suits
?*??????initPokers()
?*??????randomPokers()
?*??????putPoker()
?*??????startGame()
?*?2.?Poker
?*??????suit
?*??????number
?*??????compareTo()
?*?3.?Player
?*??????id
?*??????name
?*??????hand
?*/
public?class?Initail?{
????public?static?void?main(String[]?args)?{
????????Game?g?=?new?Game();
????????g.startGame();
????}
}

Game.java

package?kasei;

import?java.util.Scanner;
import?java.util.List;
import?java.util.ArrayList;
import?java.util.Collections;
import?java.util.InputMismatchException;


public?class?Game?{
????public?Scanner?console?=?new?Scanner(System.in);
????public?List<Poker>?pokers;
????public?List<Player>?players;
????public?int?playerNum?=?2;
????public?int?playerHandNum?=?3;

????public?Game()?{
????????this.pokers?=?new?ArrayList<Poker>();
????????this.players?=?new?ArrayList<Player>();
????}

????/**
?????*?初始化撲克牌
?????*/
????public?void?initPokers()?{
????????for?(Integer?suit?:?Poker.suits.keySet())?{
????????????for?(Integer?number?:?Poker.numbers.keySet())?{
????????????????Poker?poker?=?new?Poker(suit,?number);
????????????????pokers.add(poker);
????????????}
????????}
????}

????public?static?String?getType(Object?o)?{?//獲取變量類型方法
????????return?o.getClass().toString();?//使用int類型的getClass()方法
????}

????/**
?????*?打亂撲克牌
?????*/
????public?void?randomPokers()?{
????????Collections.shuffle(this.pokers);
????}

????/**
?????*?將牌庫第一張牌?派發給指定玩家
?????*/
????public?void?putPoker(int?index)?{
????????Poker?poker?=?pokers.get(0);
????????pokers.remove(0);
????????players.get(index).hand.add(poker);
????}

????/**
?????*?開始游戲
?????*/
????public?void?startGame()?{
????????System.out.println("——創建撲克牌——");
????????this.initPokers();
????????System.out.println("——創建撲克牌成功!——");

????????System.out.println("為:"?+?Poker.getPokersList(this.pokers));

????????System.out.println("——開始洗牌——");
????????this.randomPokers();
????????System.out.println("——洗牌結束!——");

????????System.out.println("——創建玩家...——");
????????for?(int?i?=?0;?i?<?playerNum;?i++)?{
????????????System.out.println("——請輸入第"?+?(i?+?1)?+?"位玩家的ID和姓名——");
????????????int?id?=?-1;
????????????String?name?=?"";
????????????boolean?flag?=?false;

????????????//?創建id
????????????do?{
????????????????try?{
????????????????????System.out.println("輸入ID:");
????????????????????id?=?console.nextInt();
????????????????????flag?=?true;
????????????????}?catch?(InputMismatchException?e)?{
????????????????????System.out.println("請輸入整數類型的ID!");
????????????????}?catch?(Exception?e)?{
????????????????????System.out.println("未知異常");
????????????????????e.printStackTrace();
????????????????}
????????????????console.nextLine();?//?跳過異常流的輸入
????????????}?while?(flag?==?false);

????????????//?創建name
????????????flag?=?false;
????????????do?{
????????????????try?{
????????????????????System.out.println("輸入姓名:");
????????????????????name?=?console.nextLine();
????????????????????if?(!"".equals(name))?{
????????????????????????flag?=?true;
????????????????????}?else?{
????????????????????????throw?new?InputMismatchException();
????????????????????}
????????????????}?catch?(InputMismatchException?e)?{
????????????????????System.out.println("請輸入不為空的字符串!");
????????????????}?catch?(Exception?e)?{
????????????????????System.out.println("未知異常");
????????????????????e.printStackTrace();
????????????????}
????????????}?while?(flag?==?false);

????????????Player?p?=?new?Player(id,?name);
????????????players.add(p);
????????}

????????for?(Player?player?:?players)?{
????????????System.out.println("——歡迎玩家"?+?player.name);
????????}

????????System.out.println("——開始發牌——");
????????for?(int?i?=?0;?i?<?playerNum?*?playerHandNum;?i++)?{
????????????int?index?=?i?%?playerNum;
????????????putPoker(index);
????????????System.out.println("——玩家:"?+?players.get(index).name?+?"-拿牌");
????????}
????????System.out.println("——發牌結束!——");

????????System.out.println("——開始游戲...——");
????????for?(Player?player?:?players)?{
????????????Poker?poker?=?player.getItibannPoker();
????????????System.out.println("玩家:"?+?player.name?+?"最大的手牌為:"?+?poker.getName());
????????}

????????List<Player>?pMirror?=?new?ArrayList<Player>(this.players);
????????Collections.sort(pMirror,?new?PlayerComparator());

????????System.out.println("——玩家:"?+?pMirror.get(0).name?+?"獲勝!——");

????????System.out.println("——玩家各自的手牌為:——");
????????for?(Player?player?:?players)?{
????????????System.out.println(player.name?+?":"?+?Poker.getPokersList(player.hand));
????????}

????}
}

Player.java

package?kasei;

import?java.util.Collections;
import?java.util.List;
import?java.util.ArrayList;

public?class?Player?{
????public?int?id;
????public?String?name;
????public?List<Poker>?hand;

????public?Player(int?id,?String?name)?{
????????this.id?=?id;
????????this.name?=?name;
????????this.hand?=?new?ArrayList<Poker>();
????}

????public?Poker?getItibannPoker()?{
????????List<Poker>?pokers?=?new?ArrayList<Poker>(this.hand);
????????Collections.sort(pokers);
????????if?(pokers.size()?>?0)?{
????????????return?pokers.get(0);
????????}
????????return?new?Poker();
????}
}

PlayerComparator.java

package?kasei;

import?java.util.Comparator;

public?class?PlayerComparator?implements?Comparator<Player>?{
????public?int?compare(Player?p1,?Player?p2)?{
????????if?(p1.getItibannPoker().getSize()?>?p2.getItibannPoker().getSize())?{
????????????return?-1;
????????}?else?{
????????????return?1;
????????}
????}
}


正在回答

1 回答

如果把對象放入集合中,會忽略他的類型,把他當作Object來處理,因此在取集合中元素的同時,需要強制類型轉換。

0 回復 有任何疑惑可以回復我~
#1

olaolaola 提問者

原來是這樣,感謝!
2020-03-02 回復 有任何疑惑可以回復我~
#2

餅鹽 回復 olaolaola 提問者

互相學習
2020-03-04 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

做完了,問下為什么Poker類默認是Object?。浚?6-47)

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號