簡單的洗牌算法

目錄

前言

問題

代碼展現及分析

?poker類

game類

?Text類


前言

洗牌算法為ArrayList具體使用的典例,可以很好的讓我們快速熟系ArrayList的用法。如果你對ArrayList還不太了解除,推薦先看本博主的ArrayList的詳解。

ArrayList的詳解_WHabcwu的博客-CSDN博客


問題

我們需要一副完整的撲克牌,除去大小王一共52張牌,參與游戲的玩家共3名,在洗牌后分發每名玩家5張撲克牌。


代碼展現及分析

面向對象思想解決問題主要分為這3步:

  • 找出其中的所有的對象
  • 實現所有的對象
  • 完成對象之間的交互

我們可以想到這幾個類:撲克牌,游戲的操作類, 測試類。

?poker類

描述撲克牌的屬性為花色和數字,我們對其進行封裝,再重寫?toString方法

public class poker {private String suit;private String rank;public poker(String suit, String rank) {this.suit = suit;this.rank = rank;}public String getSuit() {return suit;}public void setSuit(String suit) {this.suit = suit;}public String getRank() {return rank;}public void setRank(String rank) {this.rank = rank;}@Overridepublic String toString() {return "{" + suit + rank + "}";}
}

game類
?

import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class game {private static final String[] SUITS={"?","?","?","?"};public List<poker> buypoker(){List<poker> pokers=new ArrayList<>();for (int i = 0; i < SUITS.length; i++) {for (int j = 1; j <=13 ; j++) {poker poker = new poker(SUITS[i], j);pokers.add(poker);}}return pokers;}public List<poker> suaffle(List<poker> pokers){Random random = new Random();for (int i = pokers.size(); i >0; i--) {int indx=random.nextInt(i);poker tmp=pokers.get(i);pokers.set(i,pokers.get(indx));pokers.set(indx,tmp);}return pokers;}public void grant(List<poker> pokers){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++){poker card=pokers.remove(0);hand.get(j).add(card);}}System.out.println("第一個人的牌:");System.out.println(hand1);System.out.println("---------------------------");System.out.println("第二個人的牌:");System.out.println(hand2);System.out.println("---------------------------");System.out.println("第三個人的牌:");System.out.println(hand3);System.out.println("---------------------------");System.out.println("剩下的牌");System.out.println(pokers);}
}
buypoker方法的解析:

suaffle方法的解析:

?

grant方法的解析:

?Text類

public class Text {public static void main(String[] args) {game game = new game();List<poker> pokers=game.buypoker();System.out.println("牌到手了:");System.out.println(pokers);System.out.println("---------------------------");System.out.println("洗牌:");pokers=game.suaffle(pokers);System.out.println(pokers);System.out.println("---------------------------");game.grant(pokers);}
}

以上為我個人的小分享,如有問題,歡迎討論!!!?

都看到這了,不如關注一下,給個免費的贊?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41557.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41557.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41557.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql mysql 容器 忽略大小寫配置

首先能夠連接上mysql&#xff0c;然后輸入下面這個命令查看mysql是否忽略大小寫 show global variables like %lower_case%; lower_case_table_names 0&#xff1a;不忽略大小寫 lower_case_table_names 1&#xff1a;忽略大小寫 mysql安裝分為兩種&#xff08;根據自己的my…

sql server Varchar轉換為Datetime

將Varchar轉換為Datetime是一個常見的需求&#xff0c;在處理日期和時間數據時特別有用。在SQL Server中&#xff0c;可以使用CONVERT函數或CAST函數將Varchar轉換為Datetime。 使用CONVERT函數 CONVERT函數可以將一個值從一個類型轉換為另一個類型。以下是使用CONVERT函數將…

FPGA芯片IO口上下拉電阻的使用

FPGA芯片IO口上下拉電阻的使用 為什么要設置上下拉電阻一、如何設置下拉電阻二、如何設置上拉電阻為什么要設置上下拉電阻 這里以高云FPGA的GW1N-UV2QN48C6/I5來舉例,這個芯片的上電默認初始化階段,引腳是弱上來模式,且模式固定不能通過軟件的配置來改變。如下圖所示: 上…

centos 7.x 單用戶模式

最近碰到 centos 7.9 一些參數設置錯誤無法啟動系統的情況&#xff0c;研究后可以使用單用戶模式進入系統進行恢復操作。 進入啟動界面&#xff0c;按 e ro 替換為 rw init/sysroot/bin/sh 替換前 替換后 Ctrl-x 進行重啟進入單用戶模式 執行 chroot /sysroot 可以查看日…

【ARM64 常見匯編指令學習 19 -- ARM64 BEQ與B.EQ的區別】

文章目錄 ARM BEQ和B.EQ 上篇文章&#xff1a;ARM64 常見匯編指令學習 18 – ARM64 TST 指令與 條件標志位 Z ARM BEQ和B.EQ 在ARMv8匯編中&#xff0c;BEQ和B.EQ實際上是同一條指令的兩種不同表示方式&#xff0c;它們都表示條件分支指令&#xff0c;當某個條件滿足時&#x…

java練習4.快速查找

題目: 數組 arr[6,1,3,7,9,8,5,4,2],用快速排序進行升序排序. import java.util.Random;public class recursionDemo {public static void main(String[] args) {/*快速排序:* 第一輪:以0索引為基準數,確定基準數在數組正確的位置,* 比基準數小的放到左邊,比基準數大的放在右邊…

Scada和lloT有什么區別?

人們經常混淆SCADA&#xff08;監督控制和數據采集&#xff09;和IIoT&#xff08;工業物聯網&#xff09;。雖然SCADA系統已經存在多年&#xff0c;但IIoT是一種相對較新的技術&#xff0c;由于其能夠收集和分析來自各種設備的大量數據而越來越受歡迎。SCADA和IIoT都用于提高工…

leetcode原題:檢查子樹

題目&#xff1a; 檢查子樹。你有兩棵非常大的二叉樹&#xff1a;T1&#xff0c;有幾萬個節點&#xff1b;T2&#xff0c;有幾萬個節點。設計一個算法&#xff0c;判斷 T2 是否為 T1 的子樹。 如果 T1 有這么一個節點 n&#xff0c;其子樹與 T2 一模一樣&#xff0c;則 T2 為…

【學習筆記之vue】These dependencies were not found:

These dependencies were not found:方案一 全部安裝一遍 我們先淺試一個axios >> npm install axios 安裝完報錯就沒有axios了&#xff0c;驗證咱們的想法沒有問題&#xff0c;實行&#xff01; ok

Redis可以用作消息隊列嗎?如何實現簡單的消息隊列功能?

是的&#xff0c;Redis可以被用作簡單的消息隊列。下面是一種實現簡單消息隊列功能的方式&#xff1a; 生產者&#xff08;Producer&#xff09;端&#xff1a; 使用LPUSH命令將消息推送到一個列表中&#xff0c;作為消息隊列的實現。例如&#xff0c;使用LPUSH命令將消息推送到…

算法練習Day50|● 123.買賣股票的最佳時機III ● 188.買賣股票的最佳時機IV

LeetCode:123.買賣股票的最佳時機III 123. 買賣股票的最佳時機 III - 力扣&#xff08;LeetCode&#xff09; 1.思路 將兩次買入賣出轉化為是否持有的狀態&#xff0c;當天可進行兩次買賣&#xff0c;故每天買賣有四種狀態&#xff0c;四種狀態包含了當天不買不賣的狀態。 …

性能分析之MySQL慢查詢日志分析(慢查詢日志)

一、背景 MySQL的慢查詢日志是MySQL提供的一種日志記錄,他用來記錄在MySQL中響應的時間超過閾值的語句,具體指運行時間超過long_query_time(默認是10秒)值的SQL,會被記錄到慢查詢日志中。 慢查詢日志一般用于性能分析時開啟,收集慢SQL然后通過explain進行全面分析,一…

使用PDF文件入侵任何操作系統

提示&#xff1a;我們8月28號開學,所以我得快點更新了&#xff0c;不能拖了&#x1f625; 文章目錄 前言一、打開終端總結 前言 PDF文件被廣泛應用于共享信息&#xff0c;電子郵件&#xff0c;網站或文檔或存儲系統的真實鏈接 它可以用于惡意軟件的載體。 不要問我什么意思&am…

在項目中如何解除idea和Git的綁定

在項目中如何解除idea和Git的綁定 1、點擊File--->Settings...(CtrlAltS)--->Version Control--->Directory Mappings--->點擊取消Git的注冊根路徑&#xff1a; 2、回到idea界面就沒有Git了&#xff1a; 3、給這個項目初始化 這樣就可以重新綁定遠程倉庫了&#x…

Mysql查詢

第三章&#xff1a;select 語句 SELECT employees.employee_id,employees.department_id FROM employees WHERE employees.employee_id176; DESC departments;SELECT * FROM departments;第四章&#xff1a;運算符使用 SELECT employees.last_name,employees.salary FROM em…

springboot使用mybatis配置多數據源,同時能使用mybatisplus

概述 配置多數據源有兩種方案。一種是使用dynamic依賴的DS注解的方法&#xff0c;這種是比較簡單方便的方法。另一種是本文介紹的方式&#xff0c;配置不同數據源的SqlSessionFactory 。 第二種方法是我在開發一個老項目時&#xff0c;老項目配置的方法。 application.xml s…

centos 7鏡像(iso)下載圖文教程(超詳細)

聲明&#xff1a;本教程為本人學習筆記&#xff0c;僅供參考 文章目錄 前言一、阿里云鏡像站下載centos 7 二、清華源下載centos 7小結 前言 聲明&#xff1a;本教程為本人學習筆記&#xff0c;僅供參考 本教程將提供兩種方式下載centos 7 系統鏡像 1、阿里巴巴開源鏡像站 2、…

vue入門

Attribute 綁定 v-bind:取值方式 開發前準備 安裝node.js需要高于15.0 創建vue項目 npm init vuelatest安裝 npm install 啟動 npm run dev模板語法 文本插值 {{ 變量 }} <p> {{ mesg }} </p>這種方式公支持單一表達式&#xff0c;也可以是js代碼&#xf…

大數據課程I2——Kafka的架構

文章作者郵箱:yugongshiye@sina.cn 地址:廣東惠州 ▲ 本章節目的 ? 掌握Kafka的架構; ? 掌握Kafka的Topic與Partition; 一、Kafka核心概念及操作 1. producer生產者,可以是一個測試線程,也可以是某種技術框架(比如flume)。 2. producer向kafka生…

SIP網絡音頻模塊SV-2401V網絡對講音頻模塊(支持POE)

功能和特點 音頻工作方式&#xff1a; 音頻解碼&#xff1a;即音頻播放。接收來自網絡的音頻流&#xff0c;經過模塊解碼后通過線路輸出高質量音頻信號。目前支持可以播放以下音頻格式&#xff1a;MP3、WAV (PCM IMA ADPCM)、G.711、G.722等&#xff0c;可以播放最高48k采樣率…