一副扑克牌一共52张。种类为:♠,♥,♦,♣。每个各13张。
数组deck用来存放52张牌,
数组ranks用来标识 1~13 牌的序号,
数组suits用来标识牌的种类。
先将52张牌用0~51的序号标好。
一组扑克牌的组成是4 * 13。所以每个牌的序号除以13共可以得到 0、1、2、3这4种结果,它们可以分别对应suits数组,从而确定牌的种类。同理,每个牌的序号对13取余,其值可以根据ranks数组来确定牌号。
package test;
import java.util.Random;
public class DeckOfCards {
public static void main(String[] args){
//定义
int[] deck = new int[52];
String[] suits = {"Spades","Hearts","Diamonds","Clubs"};
String[] ranks = {"Ace","2","3","4","5","6","7","8","9","10","Jack","Queen","King"};
initialize(deck);
disruption(deck);
random(deck,suits,ranks);
}
//初始化
public static void initialize(int[] deck) {
for(int i = 0; i <deck.length;i++){
deck[i] = i;
}
}
//打乱
public static void disruption(int[] deck){
for(int i = 0;i < deck.length;i++){
int digit = (int)(Math.random()*52);
int temp = deck[i];
deck[i] = deck[digit];
deck[digit] = temp;
}
}
//随机抽出4张
public static void random(int[] deck,String[] suits,String[] ranks) {
for(int i = 0;i<4;i++){
int digit = (int)(Math.random()*52);
System.out.println("Card number " + digit +" :" +
ranks[deck[digit] % 13] + " of " + suits[deck[digit] / 13]);
}
}
}