zoukankan      html  css  js  c++  java
  • 洗扑克牌(乱数排列)

    import java.util.Random;
    
    /**
     * 洗扑克牌(乱数排列)
     *   说明:
     *      洗扑克牌的原理其实与乱数排列是相同的,都是将一组数字(例如1~N)打乱重新排列,
     *      只不过洗扑克牌多了一个花色判断的动作而已。
     *   解法:
     *          初学者通常会直接想到,随机产生1~N的乱数并将之存入阵列中,后来产生的乱数存
     *      入阵列前必须先检查阵列中是否已有重复的数字,如果有这个数就不存入,再重新产生下
     *      一个数,运气不好的话,重复的次数就会很多,程式的执行速度就很慢了,这不是一个好
     *      方法。
     *          以1~52的乱数排列为例好了,可以将阵列先依序由1到52填入,然后使用一个回圈走
     *      访阵列,并随机产生1~52的乱数,将产生的乱数当作索引取出阵列值,并与目前阵列走
     *      访到的值相交换,如此就不用担心乱数重复的问题了,阵列走访完毕后,所有的数字也就
     *      重新排列了。
     *      
     *         至于如何判断花色?这只是除法的问题而已,取商数判断花色,取余数判断数字,您可
     *      以直接看程式比较清楚。
     * */
    public class Poker {
    	private int[] cards;
    	//初始化扑克牌
    	public Poker(){
    		cards = new int[52];
    		for(int i =1;i<=52;i++){
    			cards[i-1]=i;
    		}
    	}
    	//洗牌
    	public void switchCards(){
    		int temp=0;
    		for(int i=0;i<52;i++){
    			int num = (int)(Math.random() * 100)%52;
    			temp=cards[i];
    			cards[i] = cards[num];
    			cards[num] = temp;
    		}
    	}
    	// 发牌 
    	public void sendCard() {
    		
    		for(int i =0;i<52;i++){
    			int value = cards[i]%13+1;
    			String valueString;
    			switch(value){
    				case 11:
    					valueString="J"; break;
    				case 12:
    					valueString="Q"; break;
    				case 13:
    					valueString="K"; break;
    				case 1:
    					valueString="A"; break;
    				default:
    					valueString=value+""; break;
    			}
    			switch (cards[i]/13) {
    			case 0:
    				System.out.println("黑桃 "+valueString);
    				break;
    			case 1:
    				System.out.println("红桃 "+valueString);
    				break;
    			case 2:
    				System.out.println("方块 "+valueString);
    				break;
    			case 3:
    				System.out.println("梅花 "+valueString);
    				break;
    			default:
    				break;
    			}
    		}
    
    	}
    	//测试
    	public static void main(String[] args) {
    		
    		Poker poker = new Poker();
    		poker.switchCards();
    		poker.sendCard();
    
    	}
    }
  • 相关阅读:
    HTML meta viewport属性说明(mark)
    利用css样式画各种图形初步、进阶、高级(一)
    sql where 1=1和 0=1 的作用
    java日志文件log4j.properties配置详解
    VB面向对象编程
    怎么上传代码?
    Spring中部署Activiti流程定义的三种姿势
    不会使用Spring的配置文件,赶紧把这个甩给他
    一起玩转玩转LiteOS组件:Opus
    带你读AI论文丨RAID2020 Cyber Threat Intelligence Modeling GCN
  • 原文地址:https://www.cnblogs.com/zhuqingqin/p/2996602.html
Copyright © 2011-2022 走看看