洗撲克牌問題

問題與解法描述:
/*問題:洗撲克牌
* 洗撲克牌原理=亂數排序,都是將一組數字(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

發佈了72 篇原創文章 · 獲贊 15 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章