JAVA数据结构-----使用顺序表实现一副扑克牌洗牌发牌功能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JAVA数据结构-----使用顺序表实现一副扑克牌洗牌发牌功能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2664字,纯文字阅读大概需要4分钟。
内容图文
![JAVA数据结构-----使用顺序表实现一副扑克牌洗牌发牌功能](/upload/InfoBanner/zyjiaocheng/607/92827658d6a24bfebb9fdf586ecd1c9b.jpg)
实现一副扑克牌的洗牌 + 发牌功能。
(代码中详细注释!)
//一张扑克牌
/*
体会“抽象”,一张扑克牌上面有哪些信息?提取核心信息(抽象)----花色,点数!
*/
public class Card {
//花色
public String suit;
//点数
public String rank;
public Card(String suit, String rank) {
this.suit = suit;
this.rank = rank;
}
//为了方便打印牌的内容,就可以重写toString方法。
@Override
public String toString() {
return "(" + this.suit + this.rank + ")";
}
}
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class pokerGame {
//使用数组把四种花色提前准备好
public static final String[] suits ={"?","?","?","?"};
//一副牌中有许多张单牌组成,所以用一个List线性表来“装载”。
private static List<Card> creatPoker(){
List<Card> poker = new ArrayList<>();
//用这层循环处理四种花色。
for (int i=0;i<4;i++){
//这层循环处理每种花色的13张牌,J,Q,K,A,大小王单独处理。
for (int j=2;j<=10;j++){
poker.add(new Card(suits[i],""+j));
//String.valueOf(j)可以用 ""+j 替换。将int类型转换成字符串类型。
}
poker.add(new Card(suits[i],"J"));
poker.add(new Card(suits[i],"Q"));
poker.add(new Card(suits[i],"K"));
poker.add(new Card(suits[i],"A"));
}
poker.add(new Card("","big Joker"));
poker.add(new Card("","small Joker"));
return poker;
}
//list自身是可变对象,直接修改poker的内容就会对List本身造成影响,就不需要额外返回list<Card>了。
// 洗牌思路:从后往前遍历List,取到当前位置元素和前面随机位置元素进行交换。
private static void shuffle(List<Card> poker) {
Random random = new Random();
for (int i = poker.size() - 1; i > 0; i--) {
// 产生 [0, i) 的随机数, 要和哪个位置的元素交换
int pos = random.nextInt(i);
swap(poker, i, pos);
}
}
private static void swap(List<Card> poker, int i, int j) {
Card tmp = poker.get(i);
poker.set(i, poker.get(j));
poker.set(j, tmp);
}
public static void main(String[] args) {
//1.需要先创建出一副牌。
List<Card> poker = creatPoker();
//2.洗牌。
shuffle(poker);
//3. 发牌, 假设有三个玩家, 每个玩家, 给发 5 张牌
/*
//每个玩家手里有 5 张牌, 这 5 张牌就使用另外一个 ArrayList 表示.
//此时可以把这三个玩家也放到一个 List 中.
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 < 5; i++) {
for (int j = 0; j < 3; j++) {
Card top = poker.remove(0);
List<Card> player = players.get(j);
player.add(top);
}
}
// 4. 展示手牌
for (int i = 0; i < players.size(); i++) {
List<Card> player = players.get(i);
System.out.println("玩家" + i + " 的手牌是: " + player);
}
}
}
内容总结
以上是互联网集市为您收集整理的JAVA数据结构-----使用顺序表实现一副扑克牌洗牌发牌功能全部内容,希望文章能够帮你解决JAVA数据结构-----使用顺序表实现一副扑克牌洗牌发牌功能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。