洗牌与排序

来源:互联网 发布:常见公钥算法 编辑:程序博客网 时间:2024/05/21 01:47

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[n];allCards[n] = 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,小王,大王


0 0