简单的洗牌算法
步骤
1.生成扑克牌类
扑克牌的属性包括花色和数值
代码如下:
public class Card {
private String suit;
private int rank;
public Card(String suit, int rank) {
this.suit = suit;
this.rank = rank;
}
public String getSuit() {
return suit;
}
public void setSuit(String suit){
this.suit = suit;
}
public int getRank() {
return rank;
}
public void setRank(int rank){
this.rank = rank;
}
@Override
public String toString() {
return suit + rank;
}
}
2.生成一副扑克牌
设定52张扑克牌,4种花色,每种花色13张牌(数值为1-13)
代码如下:
//花色
private static final String[] SUITS = {"♥","♠","♣","♦"};
//生成一副扑克牌:52张,4中花色,每种花色13个数字
public static List<Card> buyCard(){
List<Card> cards = new ArrayList<>();
for (int i = 0; i < SUITS.length; i++) {
for (int j = 1; j <= 13; j++) {
Card card = new Card(SUITS[i],j);
cards.add(card);
}
}
return cards;
}
3.洗牌操作
使用随机数
代码如下:
//洗牌
public static List<Card> shuffle(List<Card> cards){
Random random = new Random();
for (int i = cards.size() - 1; i > 0 ; i--) {
int j = random.nextInt(i);
Card tmp = cards.get(i);
cards.set(i,cards.get(j));
cards.set(j,tmp);
}
return cards;
}
4.摸牌操作
摸牌规则:三个人,每个人轮流摸5张牌
思路:
1.每个人摸得牌放在一个顺序表里面–>三个顺序表
2.利用一个顺序表来存放三个人对应的三个顺序表
代码如下:
public static void main(String[] args) {
List<Card> cards = buyCard();
System.out.println(cards);
System.out.println("洗牌:");
shuffle(cards);
List<List<Card>> hand= new ArrayList<>();
List<Card> hand1 = new ArrayList<>();
List<Card> hand2 = new ArrayList<>();
List<Card> hand3 = new ArrayList<>();
hand.add(hand1);
hand.add(hand2);
hand.add(hand3);
System.out.println(cards);
//三个人每个人轮流揭牌五张
//摸牌
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 3; j++) {
Card card = cards.remove(0);//每次都揭cards这副扑克牌的第一张
hand.get(j).add(card);//揭到的牌发给谁
}
}
System.out.println("第1个人的牌:");
System.out.println(hand1);
System.out.println("第2个人的牌:");
System.out.println(hand2);
System.out.println("第3个人的牌:");
System.out.println(hand3);
System.out.println("剩下的牌:");
System.out.println(cards);
总结
数据结构就是用来存储和描述对象的
需要注意的地方:
1.三个人需要放在同一个链表里
2.三个人每个人轮流揭5张牌的循环参数
3.如何揭牌
4.揭到的牌如何发