您的位置:首页 > 其它

洗牌与排序

2015-09-18 17:21 246 查看
import java.util.Random;

public class PlayCardsTest {

public static void main(String[] args) {
PlayCardsTest test = new PlayCardsTest();
String[] allCards = test.initCards();
test.dealCards(allCards);
test.printCards(allCards);
System.out.println();
test.sort(allCards);
test.printCards(allCards);
}

/**
* 洗牌,随机两张牌,再交换
*
* @param allCards
*/
public void dealCards(String[] allCards) {
Random random = new Random();
String temp;
for (int i = 0; i < 100; i++) {
int n = random.nextInt(54);
int m = random.nextInt(54);
temp = allCards
;
allCards
= allCards[m];
allCards[m] = temp;
}
}

/**
* 排序,不计花色
*
* @param allCards
*/
public void sort(String[] allCards) {
String tempCard;
for (int i = 0, size = allCards.length; i < size - 1; i++) {
int index = i; // 假设index处是最小的
for (int j = i + 1; j < size; j++) {
// 查找最小记录的位置
if (isSmall(allCards[j], allCards[index])) {
index = j;
}
}
if (index != i) { // 若第一个元素不是最小元素,则进行交换
tempCard = allCards[i];
allCards[i] = allCards[index];
allCards[index] = tempCard;
}
}
}

/**
* a牌小于b牌吗?
*
* @param a
* @param b
* @return
*/
private boolean isSmall(String a, String b) {
String numA, numB;

if (a.length() == 2) {
if (a.equals("小王")) {
numA = "14";
} else {
numA = "15";
}
} else {
numA = a.substring(2, a.length());
}

if (b.length() == 2) {
if (b.equals("小王")) {
numB = "14";
} else {
numB = "15";
}
} else {
numB = b.substring(2, b.length());
}

if (numA.equals("A")) {
numA = "1";
}
if (numA.equals("J")) {
numA = "11";
}
if (numA.equals("Q")) {
numA = "12";
}
if (numA.equals("K")) {
numA = "13";
}
if (numB.equals("A")) {
numB = "1";
}
if (numB.equals("J")) {
numB = "11";
}
if (numB.equals("Q")) {
numB = "12";
}
if (numB.equals("K")) {
numB = "13";
}
return (Integer.parseInt(numA) - Integer.parseInt(numB)) < 0 ? true
: false;
}

/**
* 初始化扑克牌
*
* @return 扑克牌数组
*/
private String[] initCards() {
String[] allCards = new String[54];
String[] numCards = new String[] { "A", "2", "3", "4", "5", "6", "7",
"8", "9", "10", "J", "Q", "K" };
for (int i = 0; i < 13; i++) {
String[] initCard = get4Cards(numCards[i]);
for (int j = 0; j < 4; j++) {
allCards[i * 4 + j] = initCard[j];
}
}
allCards[52] = "小王";
allCards[53] = "大王";
return allCards;
}

/**
* 添加 红桃、方片、梅花、黑桃 信息
*
* @param card
* @return
*/
private String[] get4Cards(String card) {
return new String[] { "红桃" + card, "方块" + card, "梅花" + card,
"黑桃" + card };
}

private void printCards(String[] allCards) {
for (int i = 0, size = allCards.length; i < size; i++) {
System.out.print(allCards[i]);
if ((i + 1) % 16 == 0) {
System.out.print(",");
System.out.println();
continue;
}
if (i != size - 1) {
System.out.print(",");
}
}
}

}
运行结果:

红桃5,红桃J,方块K,方块3,黑桃7,方块A,黑桃5,梅花Q,黑桃3,梅花A,黑桃10,红桃4,红桃8,红桃10,梅花10,方块Q,
红桃A,黑桃8,方块7,方块4,梅花6,方块2,方块6,黑桃Q,方块9,梅花K,黑桃K,红桃3,梅花9,梅花4,梅花5,黑桃2,
方块5,梅花7,红桃7,红桃K,大王,黑桃J,红桃Q,方块10,方块8,梅花3,梅花J,黑桃A,小王,梅花2,方块J,红桃9,
黑桃9,黑桃6,红桃2,红桃6,梅花8,黑桃4
方块A,梅花A,红桃A,黑桃A,方块2,黑桃2,梅花2,红桃2,黑桃3,红桃3,梅花3,方块3,方块4,梅花4,红桃4,黑桃4,
梅花5,红桃5,方块5,黑桃5,梅花6,方块6,黑桃6,红桃6,方块7,梅花7,红桃7,黑桃7,黑桃8,方块8,红桃8,梅花8,
方块9,红桃9,黑桃9,梅花9,方块10,红桃10,黑桃10,梅花10,黑桃J,梅花J,方块J,红桃J,红桃Q,梅花Q,黑桃Q,方块Q,
黑桃K,方块K,红桃K,梅花K,小王,大王
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: