1
package com.web;
2
3
public class Card {
4
5
private String face; // A, K, Q, J, 10,
2
6
private String suit; // Spade, Heart, Club, Diamond
7
8
public Card(){
9
10
}
11
12
//定义一个构造函数用于初始化点数2~A的牌
13
public Card(String suit, String face) {
14
this.face = face;
15
this.suit = suit;
16
}
17
18
//定义一个构造函数用于初始化大王和小王
19
public Card(String suit){
20
this.face = ""; //如果不给face赋值的话,洗牌和切牌后的大小王前面会显示“null”
21
this.suit = suit;
22
}
23
24
protected String getFace() {
25
return face;
26
}
27
28
protected String getSuit() {
29
return suit;
30
}
31
32
public String toString() {
33
return suit + " " + face;
34
}
35
36
public static void shuffle(Card[] deck, int startIndex, int size, int splitIndex) {
37
if (splitIndex * 2 > size) {
38
Card.swap(deck, startIndex, splitIndex, size - splitIndex);
39
shuffle(deck, size - splitIndex, splitIndex, size - splitIndex);
40
} else if (splitIndex * 2 < size) {
41
Card.swap(deck, startIndex, size - splitIndex, splitIndex);
42
shuffle(deck, startIndex, size - splitIndex, splitIndex);
43
} else {
44
Card.swap(deck, startIndex, splitIndex, splitIndex);
45
}
46
47
}
48
49
public static void swap(Card[] deck, int srcIndex, int dstIndex, int size) {
50
String face = "";
51
String suit = "";
52
for (int i = 0; i < size; i++) {
53
face = deck[srcIndex + i].face;
54
suit = deck[srcIndex + i].suit;
55
deck[srcIndex + i].face = deck[dstIndex + i].face;
56
deck[srcIndex + i].suit = deck[dstIndex + i].suit;
57
deck[dstIndex + i].face = face;
58
deck[dstIndex + i].suit = suit;
59
}
60
}
61
62
public static void main(String[] args){
63
Card[] deck = new Card[54];
64
String f[] = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };
65
// String s[] = {"Spade","Heart","Club","Diamond"};
66
String s[] = { "黑桃", "红桃", "梅花", "方块" };
67
for (int i = 0; i < s.length; i++) {
68
for (int j = 0; j < f.length; j++) {
69
deck[i * 13 + j] = new Card(s[i], f[j]);
70
}
71
deck[52] = new Card("小王");
72
deck[53] = new Card("大王");
73
}
74
int rnd = 0;
75
int numOfShuffle = 10;
76
for (int i = 0; i < numOfShuffle; i++) {
77
rnd = (int) Math.abs(Math.random() * 52);
78
Card.shuffle(deck, 0, deck.length, rnd);
79
}
80
// Test
81
for (int i = 0; i < deck.length; i++) {
82
System.out.println(deck[i]);
83
}
84
}
85
}
86
package com.web;2

3
public class Card {4

5
private String face; // A, K, Q, J, 10,
26
private String suit; // Spade, Heart, Club, Diamond7

8
public Card(){9
10
}11
12
//定义一个构造函数用于初始化点数2~A的牌13
public Card(String suit, String face) {14
this.face = face;15
this.suit = suit;16
}17

18
//定义一个构造函数用于初始化大王和小王 19
public Card(String suit){20
this.face = ""; //如果不给face赋值的话,洗牌和切牌后的大小王前面会显示“null” 21
this.suit = suit;22
}23
24
protected String getFace() {25
return face;26
}27

28
protected String getSuit() {29
return suit;30
}31

32
public String toString() {33
return suit + " " + face;34
}35

36
public static void shuffle(Card[] deck, int startIndex, int size, int splitIndex) {37
if (splitIndex * 2 > size) {38
Card.swap(deck, startIndex, splitIndex, size - splitIndex);39
shuffle(deck, size - splitIndex, splitIndex, size - splitIndex);40
} else if (splitIndex * 2 < size) {41
Card.swap(deck, startIndex, size - splitIndex, splitIndex);42
shuffle(deck, startIndex, size - splitIndex, splitIndex);43
} else {44
Card.swap(deck, startIndex, splitIndex, splitIndex);45
}46

47
}48

49
public static void swap(Card[] deck, int srcIndex, int dstIndex, int size) {50
String face = "";51
String suit = "";52
for (int i = 0; i < size; i++) {53
face = deck[srcIndex + i].face;54
suit = deck[srcIndex + i].suit;55
deck[srcIndex + i].face = deck[dstIndex + i].face;56
deck[srcIndex + i].suit = deck[dstIndex + i].suit;57
deck[dstIndex + i].face = face;58
deck[dstIndex + i].suit = suit;59
}60
}61
62
public static void main(String[] args){63
Card[] deck = new Card[54];64
String f[] = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };65
// String s[] = {"Spade","Heart","Club","Diamond"};66
String s[] = { "黑桃", "红桃", "梅花", "方块" };67
for (int i = 0; i < s.length; i++) {68
for (int j = 0; j < f.length; j++) {69
deck[i * 13 + j] = new Card(s[i], f[j]);70
}71
deck[52] = new Card("小王"); 72
deck[53] = new Card("大王"); 73
}74
int rnd = 0;75
int numOfShuffle = 10;76
for (int i = 0; i < numOfShuffle; i++) {77
rnd = (int) Math.abs(Math.random() * 52);78
Card.shuffle(deck, 0, deck.length, rnd);79
}80
// Test81
for (int i = 0; i < deck.length; i++) {82
System.out.println(deck[i]);83
}84
}85
}86


