洗牌与排序
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,小王,大王
相关文章推荐
- transitionFromViewController方法的使用--优化
- ServletContextListener监听+Thread使用
- 【烙铁使用规范】—— 延长无铅手工焊接工艺中烙铁头的寿命
- 省市二级联动
- 应用的代码没有用新的类库来进行编译(转)
- 在 Visual Studio 2013 中使用 Grunt, Bower 和 NPM
- iOS开发-文件管理
- mysql控制台操作
- jquery-chosen 选择框插件
- OpenDaylight Lithium 在ubunbtu下的安装
- IOS百度地图
- 密码 pasuwado题解
- stm32 中DMA的stream和channel关系
- CString string CStringA CStringW string wstring 等字符串转换汇总
- 数组中的each 和 jquery 中的 each
- 页面加载时执行js的几种方法
- percona-toolkit工具包的使用教程
- Android TextView 字体描边效果代码
- Maven项目部署到SAE & EL表达式不可用
- 前端性能优化(十一)