设计一个扑克算法,没想明白怎么编写,有没有人可以讲解一下。只讲解思路即可,其他的我自己做。谢谢。
呃,比较简单的方法应该可以循环扑克牌的数组,然后每次随机生成一个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()+" ");
}
}
}