自己寫的一個洗撲克牌的java程式

特種兵-AK47發表於2012-10-24

昨天去一朋友所在的公司 唱吧—你的手機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,

 

其實只是個把兩個隨機數對應撲克牌位置去相互交換的思想,至於將一副撲克牌還原整齊就用到常用的排序(選擇排序、希爾、冒泡等)了

最後:與這家公司已經失之交臂了,不過還是真心的祝願這款軟體能夠保持目前的迅猛態勢,快速發展。不管怎樣,萬分感謝曉凱的推薦,謝謝田然總監的建議。

相關文章