洗扑克牌问题

来源:互联网 发布:ipad怎么在淘宝找微淘 编辑:程序博客网 时间:2024/04/30 07:06

问题与解法描述:
/*问题:洗扑克牌
* 洗扑克牌原理=乱数排序,都是将一组数字(1-N)打乱重新排列,要求按照花色排列。
* 解法:
* 1-N按顺序排列好,依次顺序访问,并产生一个1-N随机数,将走访到的与随机数进行交换就可以!
* 因为13个数,4个花色,对13取商判断花色,取余判断数字!
*/
可运行代码:

  public class ShuffleCard {public static void shuffle(){    final int N= 52;    int[] poker = new int[N+1];    //初始化    for(int i=1;i<=N;i++)        poker[i]=i;    //洗牌    for(int i=1;i<=N;i++){        int j = (int)(Math.random()*52);//random产生0-1之间的数字,所以*N就是0-52        if(j == 0)            j = 1;        //交换        int temp = poker[i];        poker[i]=poker[j];        poker[j] = temp;    }    //    for(int i=1;i<=N;i++){    //扑克牌花色        switch((poker[i]-1)/13){        case 0:            System.out.print("红桃");            break;        case 1:            System.out.print("黑桃");            break;        case 2:            System.out.print("方块");            break;        case 3:            System.out.print("梅花");            break;    }        //扑克牌数字        int remain = poker[i]%13;        switch(remain){        case 0:            System.out.print("K ");            break;        case 12:            System.out.print("Q ");            break;        case 11:            System.out.print("J ");            break;        default:            System.out.print(remain +" ");            break;    }        //控制换行        if(i%13==0)            System.out.println("");  }

运行结果:
黑桃J 红桃6 黑桃8 梅花4 方块1 方块2 红桃1 红桃K 红桃8 黑桃1 红桃J 红桃2 方块K
方块9 梅花K 黑桃4 梅花2 方块4 黑桃Q 方块Q 方块J 梅花6 梅花7 梅花J 方块5 红桃5
红桃7 红桃10 红桃4 红桃Q 黑桃K 红桃3 梅花10 梅花1 方块3 梅花3 梅花8 黑桃6 梅花Q
黑桃10 方块6 黑桃5 方块8 黑桃9 黑桃3 黑桃7 梅花9 黑桃2 方块7 红桃9 方块10 梅花5