扑克算法的程序我不会

设计一个扑克算法,没想明白怎么编写,有没有人可以讲解一下。只讲解思路即可,其他的我自己做。谢谢。

img

img

呃,比较简单的方法应该可以循环扑克牌的数组,然后每次随机生成一个0-51的整数,交换当前扑克牌和数组[随机数]的位置


package com.poker;

/**
 * @author liangxuelong
 * @version 1.0
 * @description: 扑克牌类
 * @date 2022/6/14 14:41
 */
public class Poker {

    private String suit; //花色

    private String face; //大小

    private int number; //真实大小

    public String getSuit() {
        return suit;
    }

    public void setSuit(String suit) {
        this.suit = suit;
    }

    public String getFace() {
        return face;
    }

    public void setFace(String face) {
        this.face = face;
    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public Poker(String suit, String face, int number) {
        this.suit = suit;
        this.face = face;
        this.number = number;
    }

    @Override
    public String toString() {
        return "Poker{" +
                "suit='" + suit + '\'' +
                ", face='" + face + '\'' +
                '}';
    }
}


package com.poker;

import java.util.Random;

/**
 * @author liangxuelong
 * @version 1.0
 * @description: TODO
 * @date 2022/6/14 14:43
 */
public class PokerOperation {

    public final String[] suits = {"♥","♣","♦","♠"};

    public final String[] faces = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};

    /**
     * @description: 将52张牌用数组对象表示
     * @param:
     * @return: com.poker.Poker[]
     * @author liangxuelong
     * @date: 2022/6/14 
     */
    public Poker[] createPokers(){
        Poker[] pokerList = new Poker[suits.length*faces.length];
        int i = 0;
        for (int j = 0; j < faces.length; j++) {
            for (String suit : suits) {
                pokerList[i] = new Poker(suit,faces[j],j);
                i++;
            }
        }
        return  pokerList;
    }


    /** 
     * @description: 将花色和大小分别存放数组输出 
     * @param: pokerList 
     * @return: void 
     * @author liangxuelong
     * @date: 2022/6/14 
     */ 
    public void sortPokers(Poker[] pokerList){

        Poker[] hearts = new Poker[faces.length];

        Poker[] spades = new Poker[faces.length];

        Poker[] diamonds = new Poker[faces.length];

        Poker[] clubs = new Poker[faces.length];

        for (Poker poker : pokerList) {

            if(poker.getSuit().equals("♥")){
                hearts[poker.getNumber()] = poker;
            }else if(poker.getSuit().equals("♠")){
                spades[poker.getNumber()] = poker;
            }else if(poker.getSuit().equals("♦")){
                diamonds[poker.getNumber()] = poker;
            }else if(poker.getSuit().equals("♣")){
                clubs[poker.getNumber()] = poker;
            }
        }

        for (int i = 0; i < hearts.length; i++) {
            System.out.print(hearts[i].getSuit()+hearts[i].getFace()+" ");
        }
        System.out.println();
        for (int i = 0; i < spades.length; i++) {
            System.out.print(spades[i].getSuit()+spades[i].getFace()+" ");
        }
        System.out.println();
        for (int i = 0; i < clubs.length; i++) {
            System.out.print(clubs[i].getSuit()+clubs[i].getFace()+" ");
        }
        System.out.println();
        for (int i = 0; i < diamonds.length; i++) {
            System.out.print(diamonds[i].getSuit()+diamonds[i].getFace()+" ");
        }
        System.out.println();
    }

    /**
     * @description: 对扑克洗牌
     * @author liangxuelong
     * @date 2022/6/14 15:32
     * @version 1.0
     */
    public Poker[] shuffle(Poker[] pokerList){
        Random random = new Random();
        for (int i = 0; i < pokerList.length; i++) {
            int r = random.nextInt(51);
            Poker poker = pokerList[r]; //随机取一张扑克交互位置
            pokerList[r] = pokerList[i];
            pokerList[i] = poker;
        }
        return pokerList;
    }

    public static void main(String[] args) {

        PokerOperation pokerOperation = new PokerOperation();
        System.out.println("-----创建52张扑克,输出花色、大小的toString-----");
        Poker[] pokerList = pokerOperation.createPokers();
        for (Poker poker : pokerList) {
            System.out.println(poker.toString());
        }

        System.out.println("-----将花色和大小分别存放数组输出 -----");
        pokerOperation.sortPokers(pokerList);

        System.out.println("-----洗牌算法 打乱并输出-----");
        Poker[] shufflePokerList = pokerOperation.shuffle(pokerList);
        for (Poker poker : shufflePokerList) {
            System.out.print(poker.getSuit()+poker.getFace()+" ");
        }

    }


}

img

img