目录
前言
洗牌算法为ArrayList具体使用的典例,可以很好的让我们快速熟系ArrayList的用法。如果你对ArrayList还不太了解除,推荐先看本博主的ArrayList的详解。
ArrayList的详解_WHabcwu的博客-CSDN博客
问题
我们需要一副完整的扑克牌,除去大小王一共52张牌,参与游戏的玩家共3名,在洗牌后分发每名玩家5张扑克牌。
代码展现及分析
面向对象思想解决问题主要分为这3步:
- 找出其中的所有的对象
- 实现所有的对象
- 完成对象之间的交互
我们可以想到这几个类:扑克牌,游戏的操作类, 测试类。
poker类
描述扑克牌的属性为花色和数字,我们对其进行封装,再重写 toString方法
java
public class poker {
private String suit;
private String rank;
public poker(String suit, String rank) {
this.suit = suit;
this.rank = rank;
}
public String getSuit() {
return suit;
}
public void setSuit(String suit) {
this.suit = suit;
}
public String getRank() {
return rank;
}
public void setRank(String rank) {
this.rank = rank;
}
@Override
public String toString() {
return "{" + suit + rank + "}";
}
}
game类
java
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class game {
private static final String[] SUITS={"♥","♠","♣","♦"};
public List<poker> buypoker(){
List<poker> pokers=new ArrayList<>();
for (int i = 0; i < SUITS.length; i++) {
for (int j = 1; j <=13 ; j++) {
poker poker = new poker(SUITS[i], j);
pokers.add(poker);
}
}
return pokers;
}
public List<poker> suaffle(List<poker> pokers){
Random random = new Random();
for (int i = pokers.size(); i >0; i--) {
int indx=random.nextInt(i);
poker tmp=pokers.get(i);
pokers.set(i,pokers.get(indx));
pokers.set(indx,tmp);
}
return pokers;
}
public void grant(List<poker> pokers){
List<poker> hand1=new ArrayList<>();
List<poker> hand2=new ArrayList<>();
List<poker> hand3=new ArrayList<>();
List<List<poker>> hand=new ArrayList<>();
hand.add(hand1);
hand.add(hand2);
hand.add(hand3);
for (int i = 0; i < 5; i++) {
for(int j=0;j<3;j++)
{
poker card=pokers.remove(0);
hand.get(j).add(card);
}
}
System.out.println("第一个人的牌:");
System.out.println(hand1);
System.out.println("---------------------------");
System.out.println("第二个人的牌:");
System.out.println(hand2);
System.out.println("---------------------------");
System.out.println("第三个人的牌:");
System.out.println(hand3);
System.out.println("---------------------------");
System.out.println("剩下的牌");
System.out.println(pokers);
}
}
buypoker方法的解析:
suaffle方法的解析:
grant方法的解析:
Text类
java
public class Text {
public static void main(String[] args) {
game game = new game();
List<poker> pokers=game.buypoker();
System.out.println("牌到手了:");
System.out.println(pokers);
System.out.println("---------------------------");
System.out.println("洗牌:");
pokers=game.suaffle(pokers);
System.out.println(pokers);
System.out.println("---------------------------");
game.grant(pokers);
}
}
以上为我个人的小分享,如有问题,欢迎讨论!!!
都看到这了,不如关注一下,给个免费的赞