使用Java开发一副扑克牌并进行洗牌操作

一、需求

开发一副54张的纸牌,组成有:

  • 四种花色"♦","♣","♥","♠"
  • 13个点数:"2","3","4","5","6","7","8","9","10","J","Q","K","A"
  • 大小王:🃏👲
    
二、逻辑分析

 制作扑克牌:

  1. 定义两个数组分别存储花色和点数
  2. 使用嵌套for循环对花色和点数进行拼接,并将拼接的数据赋值给扑克牌变量中
  3. 单独将大小王赋值给扑克牌变量 
  4. 所有的数据全部存储到了扑克牌数组中,最后对数组进行遍历输出      

 洗牌:

  1. 对扑克牌数组进行for循环拿到一张纸牌A,使用随机数Random随机获取一张纸牌B
  2. 使用中间变量temp将两张纸牌进行互换
  3. for循环执行一轮以后每一张纸牌都与另外一张随机的纸牌进行了互换,则洗牌完成
  4. 使用遍历对扑克牌数组打印输出         
三、功能代码

import java.util.Random;

public class PokerTest {

    public static void main(String[] args) {
        //1:用动态初始化的方式 定义一副扑克牌 长度为54
        String[] pokerBox =new String[54];

        //2:准备 花色 和 点数
        // 扑克牌的花色 四种
        String[] colors = {"♦","♣","♥","♠"};
        //扑克牌点数 13种
        String[] numbers = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
        //组装牌?遍历点数 再遍历花色 点数和花色拼接,拼接之后存到数组的指定位置
        //2.1 定义变量 index 表示 扑克牌的存储位置(索引)
        int index = 0;
        //2.2 先遍历点数 每个点数和不同花色进行拼接产生新的牌
        for (int i = 0; i < numbers.length; i++) {
            //i 遍历点数数组 的索引
            String number = numbers[i];//获取点数  2 3  4  5 .....
            for (int j = 0; j < colors.length; j++) { //j 遍历花色数组的索引
                String color = colors[j];//取出的  "♦","♣","♥","♠"
                //拼接一张牌
                String card = color+number;//拼接牌
                pokerBox[index] = card;//存到指定的位置
                index++;//该下一个位置
            }
        }
        //4*13=52 还少  小王  大王
       pokerBox[index] = "🃏";
       pokerBox[++index]= "👲";

      // 3: 查看牌 遍历pokerbox
        for (int i = 0; i < pokerBox.length; i++) {
            System.out.print(pokerBox[i]+" ");
        }
        System.out.println();
        System.out.println("------------洗牌操作-----------");
        //4:洗牌  --- 打乱数组中元素的顺序  其实就是将牌面的位置交换!!!!
        /*
          洗牌思路
             就是将牌的位置进行交换。
              遍历扑克牌数组---依次完成交换
                每次怎么交换呢?
                  当前位置 牌A
                  随机位置 牌B
                  交换位置  牌A  牌B
         */
        Random random = new Random();
        for (int i = 0; i < pokerBox.length; i++) {
//            String cardA = pokerBox[i];
            //随机获取一个索引 表示牌B的索引位置
            int indexB = random.nextInt(pokerBox.length);//随机出一个位置
//            pokerBox[indexB];
            //cardA  cardB 交换位置
            String temp = pokerBox[i];//牌A
            pokerBox[i] = pokerBox[indexB];//牌B
            pokerBox[indexB] = temp;
        }
        System.out.println("---------------洗牌之后遍历---------------");
        for (int i = 0; i < pokerBox.length; i++) {
            System.out.print(pokerBox[i]+" ");
        }
        System.out.println();

    }
}
四、执行效果

♦2 ♣2 ♥2 ♠2 ♦3 ♣3 ♥3 ♠3 ♦4 ♣4 ♥4 ♠4 ♦5 ♣5 ♥5 ♠5 ♦6 ♣6 ♥6 ♠6 ♦7 ♣7 ♥7 ♠7 ♦8 ♣8 ♥8 ♠8 ♦9 ♣9 ♥9 ♠9 ♦10 ♣10 ♥10 ♠10 ♦J ♣J ♥J ♠J ♦Q ♣Q ♥Q ♠Q ♦K ♣K ♥K ♠K ♦A ♣A ♥A ♠A 🃏 👲 
----------------洗牌操作-----------------
----------------洗牌之后遍历-----------------
♥9 ♦A ♥7 ♠4 ♦2 ♣Q ♣6 ♠6 ♣K ♥J ♣9 ♦3 ♦4 ♦10 ♥2 ♦7 ♣5 ♥A ♦8 ♠9 ♥3 ♣4 ♣10 ♥10 ♠K ♠8 ♥8 ♣8 ♣A 👲 ♦5 ♦J ♠10 ♦K ♦9 ♣3 ♠5 ♣7 ♠7 ♥K ♥4 ♦6 🃏 ♥5 ♥6 ♠Q ♥Q ♣J ♠3 ♠A ♠J ♠2 ♣2 ♦Q 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值