資料結構 順序表實現一副撲克牌的洗牌+發牌功能
阿新 • • 發佈:2021-02-07
技術標籤:資料結構
先寫一個撲克牌的類
public class Card {
public String color;//顏色
public String Csize;//牌的大小
public Card(String color, String csize) {
this.color = color;
Csize = csize;
}
@Override
public String toString() {
return "(" + color + Csize +")" ;
}
}
由於撲克牌具有四種花色,所以我們創造一個String[]陣列
static String[] Color={"♥","♠","♣","♦"};
構建一副撲克牌
private static List BuyPoker(List<Card> list) {
for(int i=0;i<4;i++){
for(int j=2;j<=10;j++){//2~10
Card ca=new Card(Color[ i],j+"");
list.add(ca);
}
list.add(new Card(Color[i],"J"));
list.add(new Card(Color[i],"Q"));
list.add(new Card(Color[i],"K"));
list.add(new Card(Color[i],"A"));
}
list. add(new Card("","BigGhost"));
list.add(new Card("","SmallGhost"));
return list;
}
因為我們在Card類中重寫了toString方法,所以可以直接列印Card的例項
我們將一副撲克牌放在ArrayList順序表中;
List<Card> list=new ArrayList<>();
洗牌。這裡我們可以直接呼叫Collections中內建的函式,因為List繼承與Collections所以有這樣的函式
Collections.shuffle(list);
發牌,這裡用到了一個盒子中套盒子的方法,現有一個大順序表,裡面的每一個節點裡面存的也是一個順序表,因為ArrayList是泛型類,所以這樣寫也是可以的,而且更簡潔;
private static void Play(List<Card> list, int n) {
// 發牌, 假設有三個玩家, 每個玩家, 給發 5 張牌
// 每個玩家手裡有 5 張牌, 這 5 張牌就使用另外一個 ArrayList 表示.
// List<Card> player1 = new ArrayList<>();
// List<Card> player2 = new ArrayList<>();
// List<Card> player3 = new ArrayList<>();
// players 型別仍然是 List, 泛型引數, 是一個 List<Card> , 每個元素就是一個 List<Card>
List<List<Card>> players = new ArrayList<>();
// 每次 add 的元素都是一個 ArrayList<Card> 型別
players.add(new ArrayList<>());
players.add(new ArrayList<>());
players.add(new ArrayList<>());
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
Card top = list.remove(0);
List<Card> player = players.get(i);
player.add(top);
}
}
// 展示手牌
for (int i = 0; i < players.size(); i++) {
List<Card> player = players.get(i);
System.out.println("玩家" + i + " 的手牌是: " + player);
}
}
測試用例
public static void main(String[] args) {
List<Card> list=new ArrayList<>();
BuyPoker(list);
System.out.println(list);
Collections.shuffle(list);
int n=3;
Play(list,n);
}
執行結果