最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java模擬實(shí)現(xiàn)撲克牌洗牌和發(fā)牌的示例代碼

 更新時(shí)間:2022年09月23日 16:48:38   作者:XIN-XIANG榮  
這篇文章主要為大家詳細(xì)介紹了如何利用Java模擬實(shí)現(xiàn)撲克牌洗牌和發(fā)牌的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下

一. 需求

設(shè)計(jì)一副新的的撲克牌, 4個(gè)花色(♥, ♠, ♦, ♣)對(duì)應(yīng) 1 到 13 , 不算大小王一共52張牌 ; 然后將撲克牌隨機(jī)打亂順序 , 最后實(shí)現(xiàn)三個(gè)人進(jìn)行摸牌 , 三個(gè)人輪流進(jìn)行摸牌(每次摸一張牌) , 最終每個(gè)人手里有五張牌

二. 全局代碼

poker.java

public class poker {
    private String suit;//花色
    private int num;//數(shù)字

    public poker(String suit, int num) {
        this.suit = suit;
        this.num = num;
    }

    public String getSuit() {
        return suit;
    }

    public void setSuit(String suit) {
        this.suit = suit;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    @Override
    public String toString() {
        return suit+" "+num;
    }
}

pokers.java

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

public class pokers {
    public static final String[] SUITS = {"?","?","?","?"};
    //買(mǎi)一副撲克牌
    public static List<poker> buypokers() {
        List<poker> pokerList = new ArrayList<>();
        for (int i = 0; i < 4; i++) {
            for (int j = 1; j <= 13; j++) {
                pokerList.add(new poker(SUITS[i],j));
            }
        }
        return pokerList;
    }

    //洗牌
    public static void shuffle(List<poker> pokerList) {
        Random random = new Random();
        for (int i = pokerList.size()-1; i > 0; i--) {
            int index = random.nextInt(i);
            swap(pokerList, i, index);
        }
    }
    //交換
    public static void swap (List<poker> pokerList, int i, int index) {
        poker tmp = pokerList.get(i);
        pokerList.set(i, pokerList.get(index));
        pokerList.set(index, tmp);
    }

    public static void main(String[] args) {
        List<poker> pokerList = buypokers();
        System.out.println("新牌:" + pokerList);
        shuffle(pokerList);
        System.out.println("洗牌:" + pokerList);

        //揭牌 3個(gè)人 每個(gè)人輪流揭5張牌

        //用來(lái)存放三個(gè)人揭起來(lái)的牌
        List<poker> hand1 = new ArrayList<>();
        List<poker> hand2 = new ArrayList<>();
        List<poker> hand3 = new ArrayList<>();

        List<List<poker>> hand = new ArrayList<>();
        hand.add(hand1);
        hand.add(hand2);
        hand.add(hand3);

        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {
                //確定是誰(shuí)在摸牌
                List<poker> tmpHand = hand.get(j);
                tmpHand.add(pokerList.remove(0));
            }
        }

        //輸出每個(gè)人的牌
        for (int i = 0; i < hand.size(); i++) {
            System.out.println("第"+(i+1)+"個(gè)人的牌是"+hand.get(i));
        }

        System.out.println("剩余的牌有"+pokerList);
    }
}

執(zhí)行結(jié)果 :

三. 設(shè)計(jì)分析

1. 設(shè)計(jì)一張撲克牌

定義一個(gè)類(lèi) , 類(lèi)中字段包含一張撲克牌的 花色 和 數(shù)字 ,并給出構(gòu)造方法和其他相關(guān)訪問(wèn)字段的方法

public class poker {
    private String suit;//花色
    private int num;//數(shù)字

    public poker(String suit, int num) {
        this.suit = suit;
        this.num = num;
    }

    public String getSuit() {
        return suit;
    }

    public void setSuit(String suit) {
        this.suit = suit;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    @Override
    public String toString() {
        return suit+" "+num;
    }
}

2. 得到一副新牌

定義一個(gè)存放4種花色的數(shù)組 , 創(chuàng)建一個(gè)順序表來(lái)存放獲取到的撲克牌 , 通過(guò)兩層循環(huán)得到52張撲克牌 , 外層循環(huán)4次每次得到一種花色 , 內(nèi)層循環(huán)13次得到每種花色的13個(gè)值

public static final String[] SUITS = {"?","?","?","?"};
    //買(mǎi)一副撲克牌
public static List<poker> buypokers() {
    List<poker> pokerList = new ArrayList<>();
    for (int i = 0; i < 4; i++) {
        for (int j = 1; j <= 13; j++) {
            pokerList.add(new poker(SUITS[i],j));
        }
    }
    return pokerList;
}

3. 洗牌

順序表中有52張牌 , 也就是52個(gè)元素 , 從最后一個(gè)元素開(kāi)始循環(huán) , 利用 Random 這個(gè)類(lèi)中的方法生成1到元素下標(biāo)之間的隨機(jī)數(shù) , 將生成隨機(jī)數(shù)位置的元素和循環(huán)中的那個(gè)元素進(jìn)行交換 .

    //洗牌
    public static void shuffle(List<poker> pokerList) {
        Random random = new Random();
        for (int i = pokerList.size()-1; i > 0; i--) {
            int index = random.nextInt(i);
            swap(pokerList, i, index);
        }
    }
    //交換
    public static void swap (List<poker> pokerList, int i, int index) {
        poker tmp = pokerList.get(i);
        pokerList.set(i, pokerList.get(index));
        pokerList.set(index, tmp);
    }

4. 發(fā)牌

定義三個(gè)順序表分存放三個(gè)人摸起來(lái)的牌 , 將這三個(gè)順表再作為元素放入另一個(gè)新的順序表中 , 好方便執(zhí)行循環(huán)摸牌的操作 , 然后還是通過(guò)兩層循環(huán)去摸牌 , 三個(gè)人每人摸一張 , 摸5輪 , 所以外層循環(huán)執(zhí)行5次 ; 內(nèi)層循環(huán)3三次 , 每次表示一個(gè)人摸去一張牌 ;

其實(shí)每次摸牌就就是從撲克牌所在順序表中刪除第一個(gè)元素 , 所以每次摸牌訪問(wèn)的都是順序表中的第一個(gè)元素 , remove方法返回的是刪除的元素

//用來(lái)存放三個(gè)人揭起來(lái)的牌
List<poker> hand1 = new ArrayList<>();
List<poker> hand2 = new ArrayList<>();
List<poker> hand3 = new ArrayList<>();

List<List<poker>> hand = new ArrayList<>();
hand.add(hand1);
hand.add(hand2);
hand.add(hand3);

for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 3; j++) {
        //確定是誰(shuí)在摸牌
        List<poker> tmpHand = hand.get(j);
        tmpHand.add(pokerList.remove(0));
    }
}

以上就是Java模擬實(shí)現(xiàn)撲克牌洗牌和發(fā)牌的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Java撲克牌洗牌發(fā)牌的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java階乘計(jì)算獲得結(jié)果末尾0的個(gè)數(shù)代碼實(shí)現(xiàn)

    java階乘計(jì)算獲得結(jié)果末尾0的個(gè)數(shù)代碼實(shí)現(xiàn)

    今天偶然看到一個(gè)要求,求1000~10000之間的數(shù)n的階乘并計(jì)算所得的數(shù)n!末尾有多少個(gè)0?要求: 不計(jì)算 只要得到末尾有多少個(gè)0就可以了,看下面的代碼吧
    2013-12-12
  • 關(guān)于多線程常用方法以及對(duì)鎖的控制(詳解)

    關(guān)于多線程常用方法以及對(duì)鎖的控制(詳解)

    下面小編就為大家?guī)?lái)一篇關(guān)于多線程常用方法以及對(duì)鎖的控制(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • 為何HashSet中使用PRESENT而不是null作為value

    為何HashSet中使用PRESENT而不是null作為value

    這篇文章主要介紹了為何HashSet中使用PRESENT而不是null作為value,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Spring BeanName 的自動(dòng)生成原理示例詳解

    Spring BeanName 的自動(dòng)生成原理示例詳解

    這篇文章主要介紹了Spring BeanName 的自動(dòng)生成原理示例詳解,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • 基于springboot創(chuàng)建mybatis的完整步驟

    基于springboot創(chuàng)建mybatis的完整步驟

    MyBatis是一款優(yōu)秀的數(shù)據(jù)庫(kù)持久層框架,相比Hibernate我更喜歡使用MyBatis,看的到SQL還是讓人更安心點(diǎn),這篇文章主要給大家介紹了關(guān)于基于springboot創(chuàng)建mybatis的完整步驟,需要的朋友可以參考下
    2024-03-03
  • 如何用Intellij idea2020打包jar的方法步驟

    如何用Intellij idea2020打包jar的方法步驟

    這篇文章主要介紹了如何用Intellij idea 2020打包jar的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Spring內(nèi)存緩存Caffeine的基本使用教程分享

    Spring內(nèi)存緩存Caffeine的基本使用教程分享

    Caffeine作為當(dāng)下本地緩存的王者被大量的應(yīng)用再實(shí)際的項(xiàng)目中,可以有效的提高服務(wù)吞吐率、qps,降低rt,本文就來(lái)簡(jiǎn)單介紹下Caffeine的使用姿勢(shì)吧
    2023-03-03
  • 解決表單post,get到springMVC后臺(tái)亂碼的問(wèn)題

    解決表單post,get到springMVC后臺(tái)亂碼的問(wèn)題

    下面小編就為大家分享一篇解決表單post,get到springMVC后臺(tái)亂碼的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • 通俗易懂學(xué)習(xí)java并發(fā)工具類(lèi)-Semaphore,Exchanger

    通俗易懂學(xué)習(xí)java并發(fā)工具類(lèi)-Semaphore,Exchanger

    這篇文章主要介紹了java并發(fā)工具類(lèi)-Semaphore,Exchanger,java并發(fā)工具類(lèi)有很多,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,下面小編帶大家來(lái)一起學(xué)習(xí)一下吧
    2019-06-06
  • SpringBoot2.0集成Swagger2訪問(wèn)404的解決操作

    SpringBoot2.0集成Swagger2訪問(wèn)404的解決操作

    這篇文章主要介紹了SpringBoot2.0集成Swagger2訪問(wèn)404的解決操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09

最新評(píng)論

珲春市| 舞阳县| 葵青区| 全南县| 仁布县| 九龙坡区| 阳曲县| 岢岚县| 军事| 乐东| 阆中市| 宁国市| 抚顺县| 富民县| 兴国县| 忻城县| 资中县| 兴山县| 大田县| 休宁县| 满城县| 呼图壁县| 德钦县| 南澳县| 客服| 屯昌县| 舟山市| 广宗县| 菏泽市| 蒲城县| 寿光市| 三亚市| 环江| 武穴市| 晋江市| 泸西县| 宁晋县| 张家港市| 信宜市| 稷山县| 铜陵市|