一、Java集合框架中的List
Java集合框架中的List及其子集合类实现了ArrayList(顺序表),LinkedList(链表)等数据结构,通过List等集合类可以实现发牌时洗牌摸牌情景的应用。
二、代码结构
1.Card:牌类。
2.Cards:桌面牌堆类:实现生成牌,洗牌,摸牌等操作。
3.Test:测试类:测试项目效果。
三、程序源码
1.Card:牌类:
//Card类,代表牌
public class Card {
private int rank; //数字
private String suit;//花色
public Card(int rank, String suit) {
this.rank = rank;
this.suit = suit;
}
//重写toString方法,供print方法打印Arraylist对象时使用
@Override
public String toString() {
return "{"+suit+" "+rank+"}";
}
}
2.Cards:桌面牌堆类:
(1)定义
public class Cards
(2)成员变量
private static final String[] suits={"♥","♠","♦","♣"};
包括红桃、黑桃、方片、梅花四种花色。
(3)相关方法
1)生成牌堆方法
//按序生成牌堆方法
public List<Card> loadCard() {
//生成牌堆
List<Card> cardList = new ArrayList<>();
//四种花色
for(int i=0;i<4;i++){
//13张牌(11,12,13以数字代替,且不含大小王)
for(int j=1;j<=13;j++){
//按序添加卡牌
cardList.add(new Card(j,suits[i]));
}
}
return cardList;
}
2)洗牌方法(通过随机交换排序实现洗牌)
//洗牌方法
public void shuffle(List<Card> cardList){
Random random=new Random();
for(int i=cardList.size()-1;i>0;i--){
//调用random的nextInt方法生成随机数
int randIndex= random.nextInt(i);
swapCard(cardList,i,randIndex);
}
}
//换牌方法,供shuffle洗牌方法使用
private void swapCard(List<Card> cardList,int i,int j){
Card tmp=cardList.get(i);
cardList.set(i,cardList.get(j));
cardList.set(j,tmp);
}
应当注意的是导入Random包,否则Random标识符编译器无法识别,即:
import java.util.Random;
3)摸牌方法
//抓牌方法
public void drawCard(List<Card> cardList){
//生成每个人手上的牌堆
List<Card> hand1=new ArrayList<>();
List<Card> hand2=new ArrayList<>();
List<Card> hand3=new ArrayList<>();
//生成三个人手上的牌堆序列
List<List<Card>> hands=new ArrayList<>();
hands.add(hand1);
hands.add(hand2);
hands.add(hand3);
for(int i=0;i<5;i++){
//总共抓5轮
for(int j=0;j<3;j++){
//每轮三人抓牌
//每次每人从桌面牌堆上的第一张摸牌,所以remove后参数为0
Card card=cardList.remove(0);
//currentHand表示当前摸牌人
List<Card>currentHand=hands.get(j);
currentHand.add(card);
}
}
//展示每个人摸到的牌
for(int i=0;i< hands.size();i++) {
System.out.println("第"+(i+1)+"个人的牌为" + hands.get(i));
}
}
四、项目示例
在Test的main方法中测试项目代码。
import java.util.List;
//注意导入List路径
public class Test {
public static void main(String[] args) {
//生成桌面牌堆
Cards cards=new Cards();
List<Card> cardList=cards.loadCard();
System.out.println("洗牌前:"+cardList);
//洗牌
cards.shuffle(cardList);
System.out.println("洗牌后:"+cardList);
//摸牌
cards.drawCard(cardList);
}
}
结果如下:
五、小结
以上便是通过Java集合框架List实现洗牌摸牌情景的应用的全部代码,如有不当,敬请斧正!