java中关于乱序取扑克牌算法延伸

系统 1934 0

最近看到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次。对于大量的数据的排重是有显著的提升的。

其它的乱序取扑克牌有一个通病,可能会取重复的现象。大家要注意啊。

 

java中关于乱序取扑克牌算法延伸


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论