最近看到javaEye 上有一位仁兄帖出來取撲克牌亂序算法。看過還是有問題,都沒有人想到而糾正過來,本想直接回復的,可以已經結帖了。
我又最近比較空,所以自己博客里也寫寫,算是給一些新手和老手一點新的算法思路。
package com.swing; import java.util.Enumeration; import java.util.Hashtable; /** * 亂序撲克牌 洗牌方法 * * @author virture * */ public class Cards { Hashtable htMember = new Hashtable();// 放置撲克牌的Hash表 public Cards() { } public void put(String card) { htMember.put(card, card); } public void get() { System.out.println("你拿到的牌是:"); Enumeration RLKey = htMember.keys(); while (RLKey.hasMoreElements()) { String accKey = RLKey.nextElement().toString();// 取HashTable中的關鍵字詞 System.out.print((String) htMember.get(accKey) + ","); } } public static void main(String[] args) { String[] cards = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" }; String[] kinds = { "黑桃", "紅桃", "梅花", "方塊" }; Cards cardList = new Cards(); String suit;// 當前選中牌的類型 String face;// 當前選中牌 int randomCardNum = 52;// 當前隨機取牌的個數,記住不能大于全部牌52張 while (true) { suit = kinds[Math.round((float) Math.random() * (kinds.length - 1))]; face = cards[Math.round((float) Math.random() * (cards.length - 1))]; cardList.put(suit + face); if (cardList.htMember.size() >= randomCardNum && cardList.htMember.size() <= 52) { break; } } cardList.get(); } }
?
這里也同樣適用于其它過濾重復字段的方法。直接用HashTable來存儲重復字段。重復的最多再覆蓋一下,而不必用 for 循環判斷 n*n次。對于大量的數據的排重是有顯著的提升的。
其它的亂序取撲克牌有一個通病,可能會取重復的現象。大家要注意啊。
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
