自个儿写的一个洗扑克牌的java程序

自己写的一个洗扑克牌的java程序

昨天去一朋友所在的公司 唱吧—你的手机KTV (小小做一下宣传:目前app store排名很靠前的一款软件)面试了一把,结果XX

其中一个洗扑克牌的程序,昨天在草稿纸上写的,面试官说描述不清晰,今天抽空在电脑上实现了一下,为这次面试画上个句号。

package com.bankht.test.xipai;

import java.util.Random;

import org.junit.Test;

/**
 * @author: 特种兵—AK47
 * @创建时间:2012-10-24 上午09:44:39
 * 
 * @类说明 :洗牌算法
 */
public class XipaiTest {
	private String[] singleCards = new String[] { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" };
	private String[] allCards = new String[54];
	private String temp = null;// 定义临时变量,用以交换数组中两个值的位置

	@Test
	public void testXipai() {
		String[] cards = initCard();
		for (int s = 0; s < 1000; s++) {
			/*
			 * 从[0,53]之间随机选取两个数字cardNum1,cardNum2,
			 * 交换对应的数组值位置(cards[cardNum1]<——>cards [cardNum2])
			 * 该步骤循环1000次
			 */
			int cardNum1 = new Random().nextInt(54);
			int cardNum2 = new Random().nextInt(54);
			temp = cards[cardNum1];
			cards[cardNum1] = cards[cardNum2];
			cards[cardNum2] = temp;
		}
		testCardMessage(cards);// 测试扑克牌当前排序状态
	}

	/**
	 * 初始化扑克牌
	 * 
	 * @return 扑克牌数组
	 */
	private String[] initCard() {
		for (int i = 0; i < 13; i++) {
			String[] initCard = addMessage2Card(singleCards[i]);
			for (int j = 0; j < 4; j++) {
				allCards[i * 4 + j] = initCard[j];
			}
		}
		allCards[52] = "小王";
		allCards[53] = "大王";
		return allCards;
	}

	/**
	 * 针对2,3,4...Q,K,A 都有公共信息【红桃、方片、梅花、黑桃】,在初始化时进行添加
	 * 
	 * @param card
	 * @return
	 */
	private String[] addMessage2Card(String card) {
		return new String[] { "红桃" + card, "方片" + card, "梅花" + card, "黑桃" + card };
	}

	/**
	 * 测试扑克牌当前排序状态
	 * 
	 * @param allCards
	 */
	private void testCardMessage(String[] allCards) {
		for (int m = 0; m < allCards.length; m++) {
			System.out.print(allCards[m] + ",");
			if ((m + 1) % 4 == 0) {
				System.out.println();
			}
		}
	}

}


运行一下:

方片K,黑桃8,梅花2,红桃2,
梅花5,梅花8,红桃K,黑桃9,
红桃4,方片9,梅花J,方片8,
梅花Q,梅花4,黑桃Q,红桃10,
黑桃7,方片5,红桃3,大王,
红桃6,黑桃J,方片2,方片A,
黑桃2,黑桃A,梅花A,方片3,
红桃7,黑桃10,方片6,梅花10,
方片Q,小王,梅花3,红桃8,
黑桃6,黑桃K,黑桃3,红桃J,
红桃A,黑桃5,红桃5,梅花6,
方片J,方片4,红桃Q,黑桃4,
红桃9,梅花7,方片7,梅花K,
方片10,梅花9,

 

其实只是个把两个随机数对应扑克牌位置去相互交换的思想,至于将一副扑克牌还原整齐就用到常用的排序(选择排序、希尔、冒泡等)了

最后:与这家公司已经失之交臂了,不过还是真心的祝愿这款软件能够保持目前的迅猛态势,快速发展。不管怎样,万分感谢晓凯的推荐,谢谢田然总监的建议。

1楼weini6gudan昨天 08:34
程序写的很不错,我是一名刚刚自学完JAVA基础知识的菜鸟,我能看懂这个程序,简单单不失实用。