我的个人主页
我的专栏:Java-数据结构,希望能帮助到大家!!!点赞❤ 收藏❤
前言:
在编程的奇妙世界里,数据结构如同精巧的积木,搭建起各类功能的大厦。而 ArrayList,作为其中一块极为实用的 “积木”,拥有着独特的魅力与强大的功能。
当我们将目光投向生活中的趣味场景 —— 扑克牌时,你或许想不到,ArrayList 能在其中大显身手。本书(或本文档)就将带你走进这个融合了技术与趣味的领域,一同探索如何运用 ArrayList 来实现扑克牌的打印。
无论是初涉编程的新手,渴望通过一个具体又有趣的项目开启编程之旅;还是已经在编程之路上奋进的学习者,想要深入理解数据结构在实际应用中的精妙之处;亦或是单纯对科技如何改变生活日常持有好奇心的朋友,在这里,你都能找到满足求知欲的内容。我们将从基础的 ArrayList 知识讲起,逐步深入到扑克牌打印的每一个细节,包括算法设计、代码实现,见证数字世界里扑克牌的 “诞生” 过程,开启这场知识与乐趣交织的探索吧。
一:实现打印扑克牌
相关代码:
package ArrayList;
import java.util.ArrayList;
//这个类对象表示一张扑克牌
class Card {
private String suit;//表示花色
private String rank;//表示点数
public Card(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;
}
public String toString() {
return "("+this.suit+" "+this.rank+ ")";
}
}
public class demo1 {
public static void main(String[] args) {
//表示一副扑克牌
ArrayList<Card> deck=createDeck();
System.out.println(deck);
}
public static ArrayList<Card> createDeck(){
//创建一副扑克牌
ArrayList<Card> deck=new ArrayList<>();
String[] suits={"♥","♣","♦","♠"};
for(String suit:suits){
//在每个花色中生成对应点数的牌
for(int i=2;i<=10;i++){
Card card = new Card(suit,""+i);
deck.add(card);
}
Card cardJ=new Card(suit,"J");
Card cardQ=new Card(suit,"Q");
Card cardK=new Card(suit,"K");
Card cardA=new Card(suit,"A");
deck.add(cardJ);
deck.add(cardQ);
deck.add(cardK);
deck.add(cardA);
}
return deck;
}
}
最终效果呈现:
二:实现洗牌效果
可以使用Java中标准库自带的包Collections,直接进行洗牌。
效果如下:
自己实现洗牌
相关代码:
public static void shuffle(ArrayList<Card> deck){
//把整个ArrayList从后往前遍历
//针对每一次取到的一张牌,就生成一个随机下标,拿到当前位置的牌和随机位置下标的牌,进行交换。
Random random=new Random();
for(int i=deck.size()-1;i>0;i--){
int j= random.nextInt(deck.size());
//交换两张牌位置
Card tmp=new Card(deck.get(i).getSuit(),deck.get(i).getRank());
deck.set(i,deck.get(j));
deck.set(j,tmp);
}
}
效果如下
三:实现发牌
相关代码:
//发牌,假设有三个人,每个人五张牌
ArrayList<ArrayList<Card>> hands=new ArrayList<ArrayList<Card>>();
//ArrayList<HandCard> handCards=new ArrayList<HandCard>();
//先创建三个人手里的牌ArrayList
for(int i=0;i<3;i++){
ArrayList<Card> hand=new ArrayList<Card>();
hands.add(hand);
}
for(int i=0;i<5;i++){
for(int j=0;j<3;j++){
//发牌是轮流的过程
ArrayList<Card> currentHand=hands.get(j);
Card card=deck.remove(0);
currentHand.add(card);
}
}
//打印每个人的首牌
for(int i=0;i<3;i++){
System.out.println("第"+i+"个人的牌"+hands.get(i));
}
}
效果图:
四:全部代码
package ArrayList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
//每个玩家的手牌
class HandCard{
private ArrayList<Card> cards;
}
//这个类对象表示一张扑克牌
class Card {
private String suit;//表示花色
private String rank;//表示点数
public Card(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;
}
public String toString() {
return "("+this.suit+" "+this.rank+ ")";
}
}
public class demo1 {
public static void main(String[] args) {
//表示一副扑克牌
ArrayList<Card> deck=createDeck();
System.out.println("原始的牌:" +deck);
// Collections.shuffle(deck);
shuffle(deck);
System.out.println("洗牌之后:"+deck);
//发牌,假设有三个人,每个人五张牌
ArrayList<ArrayList<Card>> hands=new ArrayList<ArrayList<Card>>();
//ArrayList<HandCard> handCards=new ArrayList<HandCard>();
//先创建三个人手里的牌ArrayList
for(int i=0;i<3;i++){
ArrayList<Card> hand=new ArrayList<Card>();
hands.add(hand);
}
for(int i=0;i<5;i++){
for(int j=0;j<3;j++){
//发牌是轮流的过程
ArrayList<Card> currentHand=hands.get(j);
Card card=deck.remove(0);
currentHand.add(card);
}
}
//打印每个人的首牌
for(int i=0;i<3;i++){
System.out.println("第"+i+"个人的牌"+hands.get(i));
}
}
//自己实现洗牌
public static void shuffle(ArrayList<Card> deck){
//把整个ArrayList从后往前遍历
//针对每一次取到的一张牌,就生成一个随机下标,拿到当前位置的牌和随机位置下标的牌,进行交换。
Random random=new Random();
for(int i=deck.size()-1;i>0;i--){
int j= random.nextInt(deck.size());
//交换两张牌位置
Card tmp=new Card(deck.get(i).getSuit(),deck.get(i).getRank());
deck.set(i,deck.get(j));
deck.set(j,tmp);
}
}
public static ArrayList<Card> createDeck(){
//创建一副扑克牌
ArrayList<Card> deck=new ArrayList<>();
String[] suits={"♥","♣","♦","♠"};
for(String suit:suits){
//在每个花色中生成对应点数的牌
for(int i=2;i<=10;i++){
Card card = new Card(suit,""+i);
deck.add(card);
}
Card cardJ=new Card(suit,"J");
Card cardQ=new Card(suit,"Q");
Card cardK=new Card(suit,"K");
Card cardA=new Card(suit,"A");
deck.add(cardJ);
deck.add(cardQ);
deck.add(cardK);
deck.add(cardA);
}
return deck;
}
}
标签:java,String,deck,ArrayList,一键,suit,new,Card
From: https://blog.csdn.net/2301_80350265/article/details/144926805