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

Java中ArrayList具體實現(xiàn)之簡單的洗牌算法

 更新時間:2024年12月03日 09:46:54   作者:?喜歡做夢  
這篇文章主要給大家介紹了Java中ArrayList具體實現(xiàn)之簡單的洗牌算法,文中通過代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下

引言

實現(xiàn)一個簡單的洗牌算法,這幅牌一共52張,不包含大小王,將這副牌進行打亂(這幅牌一共52張,不包含大小王),一個五個人,每個人每輪摸一張牌,一共摸五輪。

需要實現(xiàn)的操作:

1.52張牌;

2.洗牌;

3.發(fā)牌:一共三人,5輪,每輪摸一張牌 

簡單的洗牌算法

我們需要一幅牌,但是我們沒有牌類這個類,所以我們要先自己定義一個牌類

Card類(牌類)

屬性:大小、花色

public class Card {
    //大小
    public int size;
    //花色
    public String suit;
    //初始化
    public Card(int size, String suit) {
        this.size = size;
        this.suit = suit;
    }
    @Override
    public String toString() {
        return "{"  + size+ suit +
                '}';
    }
}

既然有了牌類,那么我們就需要定義出一副牌了

CardList(一副牌)

 這副牌有哪些屬性?

大?。?-13;

花色:♥,♦,♣,♠

將每一張牌的大小和花色定義好,添加到整副牌中 

public class CardList {
    //四種花色
    public String[] suits={"?","?","?","?"};
    public List<Card> buyCard(){
        List<Card> cardList=new ArrayList<>();
        for (int i = 1; i <= 13; i++) {
            //cardList:放所有牌
            for (int j = 0; j < 4; j++) {
                //定義每一張牌的大小以及花色
                Card card=new Card(i,suits[j]);
                //將每張牌放到這幅牌中
                cardList.add(card);
            }
        }
       return  cardList;
    }
}

測試

  public static void main(String[] args) {
        CardList cardList=new CardList();
        System.out.println(cardList.buyCard());
    }

結(jié)果:

washCard(洗牌)

有了牌,我們就要像將其進行洗牌,但是我們要怎么進行洗牌呢?

這是一副牌,我們要將其位置進行打亂

那么我們是不是可以從后開始往前,將后面的牌與任意一張牌進行交換,這樣順序就被打亂了

所以我們要生成一個隨機的數(shù),用來當中隨機與之要交換的下標 

隨機數(shù)的生成:

        Random random=new Random();
        int index=random.nextInt();

因為他要不斷進行交換,隨機生成數(shù)也有一個范圍,并且每一次交換完,生成范圍減少。所以我們用for循環(huán)語句,其i的起始位置從最后一位牌開始,向前交換

 public void washCard(List<Card> cardList){
        Random random=new Random();
        for (int i = cardList.size()-1; i >0 ; i--) {
            //生成范圍在0到51之間,隨著交換次數(shù),范圍不斷減少
            int index=random.nextInt(i);
            //交換牌
            swap(i,index,cardList);
        }
    }

接下來我們需要寫一個swap方法用來交換牌

swap()

可能你想這么寫,但是他是錯誤的,因為他不是數(shù)組,且他的里面有數(shù)組

private void swap(int i,int j,List<Card> cardList){
          Card tmp=cardList[i];
          cardList[i]=cardList[j];
          cardList[j]=tmp;
   
    }

 正確寫法:

private void swap(int i,int j,List<Card> cardList){
        Card tmp=cardList.get(i);
        cardList.set(i,cardList.get(j));
        cardList.set(j,tmp);
    }

測試:

   public static void main(String[] args) {
        CardDemo cardDemo=new CardDemo();
        List<Card> cardList=cardDemo.buyCard();
        System.out.println(cardList);
        CardFunctions cardFunctions1=new CardFunctions();
        cardFunctions1.washCard(cardList);
        System.out.println(cardList);
    }

 結(jié)果:

dealCard(發(fā)牌)

一共三人,5輪,每輪摸一張牌 

所以我們先定義三個人,然后利用for循環(huán)語句,進行每輪的抽牌

  //發(fā)牌
    public void dealCard(List<Card> cardList){
        List<Card> hand1=new ArrayList<>();
        List<Card> hand2=new ArrayList<>();
        List<Card> hand3=new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {

            }

        }
    }

每個人從牌的最上方揭走一張牌,我們要使用到remove

cardList.remove(0);

但是我們要怎么將這些牌放到對應的手里面,因為hand1,2,3里面是一維,所以我們可以定義一個二維來儲存他們

  public void dealCard(List<Card> cardList){
        List<Card> hand1=new ArrayList<>();
        List<Card> hand2=new ArrayList<>();
        List<Card> hand3=new ArrayList<>();
        List<List<Card>> 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++) {
                Card card=cardList.remove(0);
                //將摸到的手牌分別放到handj手中
                hand.get(j).add(card);
            }
        }
    }

 測試:

    public static void main(String[] args) {
        //一副牌52張
        CardDemo cardDemo=new CardDemo();
        List<Card> cardList=cardDemo.buyCard();
        System.out.println(cardList);
        //洗牌
        CardFunctions cardFunctions1=new CardFunctions();
        cardFunctions1.washCard(cardList);
        System.out.println(cardList);
        //分牌
        List<List<Card>> ret=cardFunctions1.dealCard(cardList);
        for (int i = 0; i < ret.size(); i++) {
            System.out.println("第"+(i+1)+"人:"+ret.get(i));
        }
    }

結(jié)果:

總結(jié)

到此這篇關(guān)于Java中ArrayList具體實現(xiàn)之簡單的洗牌算法的文章就介紹到這了,更多相關(guān)Java ArrayList洗牌算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 簡單了解Java刪除字符replaceFirst原理及實例

    簡單了解Java刪除字符replaceFirst原理及實例

    這篇文章主要介紹了簡單了解Java刪除字符replaceFirst原理及實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • 詳解SpringBoot優(yōu)雅編碼之Lombok加持

    詳解SpringBoot優(yōu)雅編碼之Lombok加持

    這篇文章主要介紹了詳解SpringBoot優(yōu)雅編碼之Lombok加持,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Java開發(fā)SpringBoot集成接口文檔實現(xiàn)示例

    Java開發(fā)SpringBoot集成接口文檔實現(xiàn)示例

    這篇文章主要為大家介紹了Java開發(fā)SpringBoot如何集成接口文檔的實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-10-10
  • Mybatis批量新增的三種實現(xiàn)方式

    Mybatis批量新增的三種實現(xiàn)方式

    文章講述了在Java中進行批量操作的最佳實踐,包括使用MyBatis的ExecutorType.BATCH模式,作者建議根據(jù)實際需求選擇是否進行批量操作,因為批量操作并不總是能提升性能,且有副作用,如無法獲取自增ID等
    2024-12-12
  • springmvc的@Validated注解使用

    springmvc的@Validated注解使用

    這篇文章主要介紹了springmvc的@Validated注解使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • SpringMVC核心技術(shù)

    SpringMVC核心技術(shù)

    這篇文章主要介紹了SpringMVC入門實例,在springmvc入門教程里算是比較不錯的,結(jié)構(gòu)也比較完整,需要的朋友可以參考。希望可以幫助到你
    2021-07-07
  • Spring和MyBatis整合自動生成代碼里面text類型遇到的坑

    Spring和MyBatis整合自動生成代碼里面text類型遇到的坑

    Spring和MyBatis整合以后,使用自動生成代碼工具生成dao和mapper配置文件。下面通過本文給大家介紹Spring和MyBatis整合自動生成代碼里面text類型遇到的坑,需要的朋友參考下吧
    2018-01-01
  • Java數(shù)據(jù)結(jié)構(gòu)之雙向鏈表的實現(xiàn)

    Java數(shù)據(jù)結(jié)構(gòu)之雙向鏈表的實現(xiàn)

    相較單鏈表,雙向鏈表除了data與next域,還多了一個pre域用于表示每個節(jié)點的前一個元素。這樣做給雙向鏈表帶來了很多優(yōu)勢。本文主要介紹了雙向鏈表的實現(xiàn),需要的可以參考一下
    2022-10-10
  • SpringBoot + Mybatis增刪改查實戰(zhàn)記錄

    SpringBoot + Mybatis增刪改查實戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于SpringBoot + Mybatis增刪改查的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-05-05
  • Spring Boot 發(fā)送郵件功能案例分析

    Spring Boot 發(fā)送郵件功能案例分析

    這篇文章主要介紹了 Spring Boot 發(fā)送郵件功能,本文通過代碼結(jié)合案例分析給大家介紹的非常詳細,需要的朋友可以參考下
    2017-11-11

最新評論

唐河县| 葫芦岛市| 定陶县| 诏安县| 遂平县| 贵阳市| 新和县| 周口市| 茂名市| 海阳市| 土默特左旗| 石柱| 宁陕县| 松滋市| 同江市| 安泽县| 旬邑县| 定边县| 宁德市| 安徽省| 区。| 绥宁县| 洞口县| 德庆县| 科技| 张家界市| 巴林左旗| 云龙县| 浮梁县| 阿图什市| 五台县| 鲁甸县| 昌邑市| 涿州市| 上杭县| 河西区| 靖远县| 赫章县| 密山市| 岳普湖县| 永宁县|