用java完成洗扑克牌的程序 (不考虑大小王)
首先用一个car[51]数组来存
数组下标 [0]..[12] [13]..[25] [26]..[38] [39]..[51]
数组元素 0..12 13..25 26..38 39..51
相当于一组有13个元素,分别代表A、2、3、4、5、6、7、8、9、10、J、O、K、
接着第一组代表黑桃♠,第二组代表红心,第三组代表方块,第四组代表梅花♣
小提示:每组13个元素,则/13可以取得花色,%13可以取牌面 数的时候从0开始
计数,因为数组元素是0-51,所以/的结果只可能是0、1、2、3 与四组对应
如数组元素24: 24 / 13 == 1 所以花色是红心 24 % 13 == 11 所以牌面是11
14 15 16 17 18 19 20 21 22 23 24 25 26
A 2 3 4 5 6 7 8 9 10 J O K
如数组元素32: 32 / 13 == 2 所以花色是方块 32 % 13 == 6 所以牌面是6
39 40 41 42 43 44 45 46 47 48 49 50 51
k 1 2 3 4 5 6 7 8 9 10 j O
如数组元素39:39 / 13 ==3 所以花色是梅花 39 % 13 == 0 所以牌面是K
定义牌面数组 和 花色数组
String[] cardsColors = {"黑桃","红心","方块","梅花"};
String[] cardsValues {"A","2","3","4","5","6","7","8","9","10","J","O","K"};
核心算法思想:car[51]数组随机生成0-51的随机数字(下标)newindex,现在的i和刚生
成的随机数字交换。即cards[newIndex] 和 cards[i]交换
具体代码如下:
public class ShuffleCardsDemo {
public static void main(String[] args) {
String[] cardsColors = {"黑桃","红心","方块","梅花"};
String[] cardsValues = {
"A","2","3","4","5","6","7","8","9","10","J","O","K"
};
final int N = 52;
int[] cards = new int[N];
for (int i = 0; i < cards.length; i++) {
cards[i] = i;
}
System.out.println("洗牌前:");
for (int i = 0; i < cards.length; i++) {
System.out.printf("%s-%s",cardsColors[cards[i] / 13],cardsValues[cards[i] % 13] );
if((i + 1) % 13 == 0){
System.out.println();
}else{
System.out.print("\t");
}
}
System.out.println();
for (int i = 0; i < cards.length; i++) {
int newIndex = (int)(Math.random()*1000) % N;
int temp = cards[i];
cards[i] = cards[newIndex];
cards[newIndex] = temp;
}
System.out.println("洗牌后:");
for (int i = 0; i < cards.length; i++) {
System.out.printf("%s-%s",cardsColors[cards[i] / 13],cardsValues[cards[i] % 13] );
if((i + 1) % 13 == 0){
System.out.println();
}else{
System.out.print("\t");
}
}
}
}