java洗牌,java洗牌函數

本文目錄一覽:

用java撰寫一個簡單的洗牌程序,可在文本模式下顯示洗牌結果

//牌類

public class Card {

private int face; //牌的面值

private int suit;  //牌的花色

public Card(int face, int suit) {

super();

this.face = face;

this.suit = suit;

}

public int getFace() {

return face;

}

public void setFace(int face) {

this.face = face;

}

public int getSuit() {

return suit;

}

public void setSuit(int suit) {

this.suit = suit;

}

}

//模擬洗牌和發牌

public class Test {

public static void main(String[] args) {

Card[] deck = new Card[52];

fillDeck(deck);

deal(deck);

System.out.println();

}

private static void fillDeck(Card[] deck) {

int i, j=0;

for (i = 0; i  52; i++) {

j = (int) (Math.random() * 52);

deck[i]=new Card(j%13,j/13); 

}

}

private static void deal(Card[] deck) {

int k1, k2;

System.out.println();

for (k1 = 0, k2 = k1 + 26; k1  26; k1++, k2++) {

if (k1 % 13 == 0)

System.out.println(“\n第” + (k1 / 13 + 1) + 

“組牌:\t\t\t第”+ (k1 / 13 + 3) + “組牌:”);

System.out.print(“\nCard:  ” + deck[k1].getFace() + 

”  Suit:  “+ deck[k1].getSuit());

System.out.print(“\t\t\tCard:  ” + deck[k2].getFace() + 

”  Suit:  “+ deck[k2].getSuit());

}

}

}

java撲克牌洗牌程序,求抽可以抽出特定牌的次數

package zhidao;

import java.util.Arrays;

import java.util.Collections;

import java.util.Comparator;

import java.util.Scanner;

/**

 * 發牌遊戲

 */

public class PokerGame

{

/**

 * 共有1幅撲克牌,不包括大王和小王共52張牌。

 */

public static final int POKER_NUMBER = 52;

/**

 * 特殊分隔符 _

 */

private static final String T = “_”;

/**

 * 52張牌br /

 * 順序為黑桃、紅心、草花、方塊

 */

public static final String[] POKERS = 

{

“A” + T + “0”, “A” + T + “1”, “A” + T + “2”, “A” + T + “3”,

“2” + T + “0”, “2” + T + “1”, “2” + T + “2”, “2” + T + “3”,

“3” + T + “0”, “3” + T + “1”, “3” + T + “2”, “3” + T + “3”,

“4” + T + “0”, “4” + T + “1”, “4” + T + “2”, “4” + T + “3”,

“5” + T + “0”, “5” + T + “1”, “5” + T + “2”, “5” + T + “3”,

“6” + T + “0”, “6” + T + “1”, “6” + T + “2”, “6” + T + “3”,

“7” + T + “0”, “7” + T + “1”, “7” + T + “2”, “7” + T + “3”,

“8” + T + “0”, “8” + T + “1”, “8” + T + “2”, “8” + T + “3”,

“9” + T + “0”, “9” + T + “1”, “9” + T + “2”, “9” + T + “3”,

“10” + T + “0”, “10” + T + “1”, “10” + T + “2”, “10” + T + “3”,

“J” + T + “0”, “J” + T + “1”, “J” + T + “2”, “J” + T + “3”,

“Q” + T + “0”, “Q” + T + “1”, “Q” + T + “2”, “Q” + T + “3”,

“K” + T + “0”, “K” + T + “1”, “K” + T + “2”, “K” + T + “3”

};

/**

 * 原始的撲克牌

 */

public static final String[] ORIAL_POKERS = POKERS.clone ();

/**

 * 發到哪張牌 0

 */

public static int currentIndex = 0;

/**

 * 四種花色

 */

public static final String POKER_COLOR = “黑桃” + T + “紅心” + T + “草花” + T + “方塊”;

/**

 * 發牌

 * @param n int 一共幾個人玩牌

 * @param results 儲存發牌結果的數組

 */

public static void drawPoker (int n, String[][] results)

{

int m = n – 1;

if (n == 0)

{

return;

}

int number = (POKER_NUMBER – currentIndex) / n;

while (number  0)

{

String current = POKERS[currentIndex++];

String pk = current.split (“\\” + T)[0].trim ();

int col = Integer.parseInt (current.split (“\\” + T )[1].trim ());

if (null == results[m][col])

{

results[m][col] = pk + ” “;

}

else 

{

results[m][col] += pk + ” “;

}

number–;

}

for ( int i = 0; i  results.length; i++ )

{

for ( int j = 0; j  results[i].length; j++ )

{

if (null == results[i][j])

{

results[i][j] = “”;

}

}

}

drawPoker (–n, results);

}

/**

 * 給牌排序

 * @param orialPokers String 原始撲克牌

 * @param temp String[] 每張花色的撲克牌數組

 */

private static void sortPokers ( final String orialPokers, String[] temp )

{

Arrays.sort (temp, new ComparatorString ()

{

@Override

public int compare ( String o1, String o2 )

{

int index1 = orialPokers.indexOf (o1 + T);

int index2 = orialPokers.indexOf (o2 + T);

if (index1  index2)

{

return -1;

}

else if (index1  index2)

{

return 1;

}

else

{

return 0;

}

}

});

}

/**

 * 洗牌

 */

private static void shufflePokers ( String[] POKERS )

{

Collections.shuffle (Arrays.asList (POKERS));

}

public static void main ( String[] args )

{

System.out.print (“輸入人數:”);

Scanner scanner = new Scanner (System.in);

int n = scanner.nextInt ();

scanner.close ();

String[] pColors = POKER_COLOR.split (“\\” + T );

String[][] results = new String[n][pColors.length];

shufflePokers (POKERS);

drawPoker (n, results);

final String poker = Arrays.toString (ORIAL_POKERS);

System.out.println (“\n輸出如下:\n”);

for (int i = 0; i  results.length; i++)

{

System.out.println (“第” + ( i + 1 ) + “個人:”);

for ( int j = 0; j  results[i].length; j++ )

{

String[] temp = results[i][j].trim ().split (“\\s+”);

sortPokers (poker, temp);

System.out.println (pColors[j] + “:” + Arrays.toString (temp).replaceAll (“[\\,\\[\\]]”, “”));

}

System.out.println ();

}

}

}

java洗牌演算法問題

你指的是Card里的toString方法吧

 public String toString() {

  String aa = suit + ” ” + num + ”  “;

  return aa;

 }

toString這個方法一般在 System.out.print時使用,這個是列印出String,JVM就是默認調用類的toSting方法

註:所有類都有toString方法,默認是當前對象的hashcode,即內存地址

所以在發牌是列印

 public void dealcard()//發牌

    {

        for(int i=0;i52;i++)

        {

            if(i%4==0i!=0){

             System.out.println();  //每發4張牌輸出換行

            }

            // 就是這裡,默認調用card的toString方法

             System.out.print(card[i]); //依次輸出 發的牌

        }

    }

用JAVA寫個代碼,實現52張牌隨機分給四個人

java內的Collections類自帶了一個shuffle洗牌演算法。

static void shuffle(List? list)

使用默認隨機源對指定列表進行置換。

static void shuffle(List? list, Random rnd)

使用指定的隨機源對指定列表進行置換。

現在你可以把52張牌放進一個List里,調用他的shuffle演算法打亂順序。

java 中如何實現一副撲克牌洗牌的功能。如果無法書寫完整的代碼,可以用文字描述出自己的實現思路

1.定義牌類

public class Card{

public int id;//牌大小

public String number;//牌值名稱

public String color;//花色

}

2.定義牌組,用ArrayList存放所有牌

ArrayListCard cardGroup =new ArrayListCard();

3.定義花色枚舉

public static final String[] COLORS=new String[]{“方塊”,”梅花”,”紅桃”,”黑桃”};

4.定義牌值大小枚舉

public static fina String[] CARDVALUES=new String[]{“A”,”1″,”2″,”3″,

“4”,”5″,”6″,”7″,”8″,”9″,”10″,”J”,”Q”,”K”,”King_Small”,”King_Big”};

5.初始化牌組,這就是一副新牌,沒切過,己經排好序的

public void initCardGroup(){

//加入A~K

for(int i=0;i13;i++){

for (int j=0;j4;j++){

//生成一張牌的對象

Card card=new Card();

card.id=i;

card.color=COLORS[j];

card.munber=CARDVALUES[i];

//將對象加入牌組

cardGroup.add(card);

}

}

//加入大小王

Card card_k1=new Card();

card_k1.id=13;

card_k1.color=”King_Small”;

card_k1.number=”King_Small”;

cardGroup.add(card_k1);

Card card_k2=new Card();

card_k2.id=14;

card_k2.color=”King_big”;

card_k2.number=”King_big”;

cardGroup.add(card_k2);

}

6. 洗牌,將原牌組打亂,得到新的牌組

public ArrayListCard flushCardsGroup(ArrayListCard src){

ArrayListCard result=new ArrayListCard();

while(src.size0){

int size=src.size();

//以size為限,生成0~size之間的隨機數

Random r=new Random();

int index=r.nextInt(size);

//對index做個檢查

if(index0){index=0;}

if(indexsize-1){index=size-1;}

//index就是撿出來的牌,加到新的數組中,從原來數組中刪除

Card card=src.get(index);

result.add(card);

card.remove(index);

}

return result;

}

原創文章,作者:POGM,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/133269.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
POGM的頭像POGM
上一篇 2024-10-03 23:57
下一篇 2024-10-03 23:57

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字元串操作中,capitalize函數常常被用到,這個函數可以使字元串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • 單片機列印函數

    單片機列印是指通過串口或並口將一些數據列印到終端設備上。在單片機應用中,列印非常重要。正確的列印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的列印數據可以幫助我們快速…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29

發表回復

登錄後才能評論