用Java模拟洗扑克牌

怎么用程序去模拟洗牌呢!

我们可以这样想,一副扑克牌一共有54张牌,除去大小王,那么还剩下52张牌

52张牌又可以分为4种花色,每种花色对应13张牌

分别为:A,1  ,2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ,J,Q,K

一开始如果我们买了一副新的扑克牌,那么它会是按照顺序的,我们为了公平起见当然是要洗牌,洗的牌越乱越公平

所以我们定义一个数组用来存放52张牌

数组下标分别对应0-51,并且给予赋值也是0-51

这样的好处:

我们可以知道我如果在定义一个String类型的数组存储花色

以及一个String类型的数组存储牌的大小当然是A-K之间

那么我们可以通过开始存放0-51的下标所存储的元素/13就可以得到对应的花色数组的下标

扫描二维码关注公众号,回复: 2068792 查看本文章

那么用0-51的下标所存储的元素%13就可以得到是哪一张牌的大小了

大致这是洗牌前的操作

final int N = 52;
		int cards[] = new int[N];
		String huase[] = {"红桃","黑桃","方块","梅花"};                         //一副扑克牌有4种不同的花色
		//一副扑克牌的牌面是1-10,J,Q,K13种情况
		String cardsNumber[] = {
			"A","2","3","4","5","6","7","8","9","10","J","Q","K"	                      
		};
        //首先,我们需要进行数组赋值,按照规律来0-12红桃,13-25黑桃,26-38方块,39-51梅花
		for(int i = 0;i<cards.length;i++) {
			cards[i] += i; 
		}
		//洗牌前的顺序
		System.out.println("洗牌前的顺序:");
		for(int i = 0;i<cards.length;i++) {
			System.out.printf("%s%s ",huase[cards[i]/13],cardsNumber[cards[i]%13]);
			if((i+1)%13==0) {
				System.out.println();
			}
		}

然后我们可以操作随机数来生成0-51的数

源代码如下:

public class WashCardsDemo {

	public static void main(String[] args) {
		// 定义一个常量N,为数组大小
		final int N = 52;
		int cards[] = new int[N];
		String huase[] = {"红桃","黑桃","方块","梅花"};                         //一副扑克牌有4种不同的花色
		//一副扑克牌的牌面是1-10,J,Q,K13种情况
		String cardsNumber[] = {
			"A","2","3","4","5","6","7","8","9","10","J","Q","K"	                      
		};
        //首先,我们需要进行数组赋值,按照规律来0-12红桃,13-25黑桃,26-38方块,39-51梅花
		for(int i = 0;i<cards.length;i++) {
			cards[i] += i; 
		}
		//洗牌前的顺序
		System.out.println("洗牌前的顺序:");
		for(int i = 0;i<cards.length;i++) {
			System.out.printf("%s%s ",huase[cards[i]/13],cardsNumber[cards[i]%13]);
			if((i+1)%13==0) {
				System.out.println();
			}
		}
		//模拟洗牌,通过产生0-51的随机数来模拟洗牌
		for(int i = 0;i<cards.length;i++) {
			cards[i] = (int)((Math.random())*52);    //产生0-51的随机数,相当于打乱牌的顺序
		}
		//洗牌后
		System.out.println("洗牌后的顺序:");
		for (int i = 0; i < cards.length; i++) {
			System.out.printf("%s%s ",huase[cards[i]/13],cardsNumber[cards[i]%13]);
			if((i+1)%13==0) {
				System.out.println();
			}
		}
	}

}
运行结果:

猜你喜欢

转载自blog.csdn.net/lytwy123/article/details/80984257