扑克牌的洗牌实现

自己随便写的,直接贴个代码吧:

package poker;

import java.io.Serializable;

public class Poker implements Serializable {

    private static final long serialVersionUID = -1531112704784497500L;

    public static final String[] suit = {
        "红", "梅", "方", "黑"
    };

    private String point;

    private int value;

    private String color;

    private boolean isUsed = false;

    public String getPoint() {
        return this.point;
    }

    public void setPoint(String point) {
        this.point = point;
    }

    public int getValue() {
        return this.value;
    }

    public void setValue(int value) {
        this.value = value;
    }

    public boolean isUsed() {
        return this.isUsed;
    }

    public void setUsed(boolean isUsed) {
        this.isUsed = isUsed;
    }

    public String getColor() {
        return this.color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    @Override
    public String toString() {
        return "[" + color + "," + point + "]";
    }
}
package poker;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class PokerService {
    private List<Poker> pokerList;

    private void initPoker() {
        pokerList = new ArrayList<Poker>();
        for (int s = 0; s < 4; s++) {
            for (int i = 0; i < 13; i++) {
                Poker poker = new Poker();
                int point = i + 1;
                switch (point) {
                    case 1:
                        poker.setPoint("A");
                        break;
                    case 11:
                        poker.setPoint("J");
                        break;
                    case 12:
                        poker.setPoint("Q");
                        break;
                    case 13:
                        poker.setPoint("K");
                        break;
                    default:
                        poker.setPoint(String.valueOf(point));
                        break;
                }
                poker.setValue(point);
                poker.setColor(Poker.suit[s]);
                pokerList.add(poker);
            }
        }
        Poker smallGhost = new Poker();
        smallGhost.setPoint("small ghost");
        smallGhost.setValue(99);
        pokerList.add(smallGhost);

        Poker bigGhost = new Poker();
        bigGhost.setPoint("big ghost");
        bigGhost.setValue(100);
        pokerList.add(bigGhost);
    }

    private void shufflePoker() {
        Poker temp = new Poker();
        if (pokerList == null || pokerList.size() != 54) {
            return;
        }
        Random random = new Random();
        for (int i = 0; i < 1000; i++) {
            int position = i % 54;
            int position2 = random.nextInt(54);
            if (position != position2) {
                temp = pokerList.get(position);
                pokerList.set(position, pokerList.get(position2));
                pokerList.set(position2, temp);
            }
        }

    }

    public static void main(String[] args) {
        PokerService pService = new PokerService();
        pService.initPoker();
        System.out.println(pService.getPokerList());
        pService.shufflePoker();
        System.out.println(pService.getPokerList());
    }

    public List<Poker> getPokerList() {
        return this.pokerList;
    }

    public void setPokerList(List<Poker> pokerList) {
        this.pokerList = pokerList;
    }
}
时间: 2024-10-12 07:22:26

扑克牌的洗牌实现的相关文章

AS3.0 扑克牌乱序排列法洗牌

package { /* *@ClassName:package::PokerMain *@Intro:这是一个初始化1-52扑克牌,然后进行乱序排列进行洗牌: *@Author:非若 *@Date:2015.07.22 *@LanguageVersion:ActionScript 3.0 * */ import flash.display.Sprite; public class PokerMain extends Sprite { //设置扑克牌总数 private var NUM:Numb

使用LinkedList存储一副扑克牌,然后实现洗牌功能。

/* 需求: 使用LinkedList存储一副扑克牌,然后实现洗牌功能. */ //扑克类 class Poker{ String color; //花色 String num; //点数 public Poker(String color, String num) { super(); this.color = color; this.num = num; } @Override public String toString() { return "{"+color+num+&quo

给定N张扑克牌,设计一个洗牌算法

均匀洗牌即可 方法1: #include<stdio.h> #include<stdlib.h> #include<time.h> static int num = 54;//num为纸牌数目 //随机数发生器,产生[n,m)之间的随机数 int getRandNum(int n,int m) { if(n==m) { return n; } else if(n>m) { return -1; } time_t time1; srand(( unsigned in

扑克牌的完美洗牌算法

思路: 递归思想.我们有n张牌,不妨先假设有一个洗牌函数shuffle(....),能完美的洗出n-1张牌 .拿第n张牌来打乱前面n-1的洗牌顺序,从而得到n张牌的最终结果. 代码如下: 1 #include <iostream> 2 #include <cstdlib> 3 using namespace std; 4 5 //随机指定区域内的数 6 int MyRand(int low, int high) 7 { 8 return low + rand() % (high -

一个数组实现扑克牌均匀随机洗牌------多次洗牌能否避免黑客的计算?

闲来无事,研究下纸牌发牌,按斗地主来发吧,思路如下: 1,新建一个数组,长度52,将四种花色和大小王存储进数组 2,循环0至51,在循环因子i至52之间取随机数(能取到下界,不能取到上界),取到的随机数作为数组元素下标取该元素,与第i个元素交换位置,循环结束即排序完毕 3,输出纸牌即可. 思路明确,"啪啪啪~~" 12秒之后 贴上代码 1初始化数组 //声明存放纸牌的数组 string[] Card = new string[54]; //初始化四种花色和大小王,分别用▲★◆■+数字和

[转]完美洗牌(Perfect Shuffle)问题

[转]原博文地址:https://github.com/julycoding/The-Art-Of-Programming-By-July/blob/master/ebook/zh/02.09.md 完美洗牌算法 题目详情 有个长度为2n的数组{a1,a2,a3,...,an,b1,b2,b3,...,bn},希望排序后{a1,b1,a2,b2,....,an,bn},请考虑有无时间复杂度o(n),空间复杂度0(1)的解法. 题目来源:此题是去年2013年UC的校招笔试题,看似简单,按照题目所要

java语言实现简单的洗牌,发牌

java学习过程中,老师让写了个简单的斗地主洗牌发牌的程序,一下就是程序代码: package com.java.lei.homework; import java.util.Arrays; import java.util.Random; public class PokerGame { //1.创建数组,用以存储扑克牌 static String[] pokers = new String[54]; public static void main(String[] args) { //2.创

1965: [Ahoi2005]SHUFFLE 洗牌

1965: [Ahoi2005]SHUFFLE 洗牌 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 408  Solved: 240[Submit][Status][Discuss] Description 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联提议用扑克牌打发长途旅行中的无聊时间.玩了几局之后,大家觉得单纯玩扑克

bzoj1965 [Ahoi2005]SHUFFLE 洗牌

Description 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学家们要在飞船中度过相当长的一段时间,小联提议用扑克牌打发长途旅行中的无聊时间.玩了几局之后,大家觉得单纯玩扑克牌对于像他们这样的高智商人才来说太简单了.有人提出了扑克牌的一种新的玩法. 对于扑克牌的一次洗牌是这样定义的,将一叠N(N为偶数)张扑克牌平均分成上下两叠,取下面一叠的第一张作为新的一叠的第一张,然后取上面一叠的第一张作为新的一叠