【问题标题】:How to initializing a boolean array for suits in a deck of cards in java如何在Java中为一副纸牌中的西装初始化一个布尔数组
【发布时间】:2018-02-27 18:07:43
【问题描述】:

你如何为一副纸牌中的花色初始化一个布尔数组,然后使它成为一个随机数将花色变为真?为了初始化一个数组,我有

    boolean[] suitsSelected = {"spades","clubs","diamonds", "hearts"};

然后声明一个随机数

    Random myRandom = newRandom();
    int card = myRandom.nextInt(51);

然后在选择卡片后将布尔花色变为真?

    spade = (card >= 0 && card < 14);
    heart = (card >= 14 && card < 27);
    club = (card >= 27 && card < 39);
    diamond = (card >= 40 && card < 52);

【问题讨论】:

  • 不应该 nextInt(51) 是 52 吗?我认为标准牌组中有 52 张牌。
  • 为什么你的布尔数组是用字符串填充的?
  • 你打算如何用二进制类型来表示四个花色?
  • 是的,这只是……很奇怪。请向我们展示一些可以编译的代码。 (在蒂姆的评论中。)总的来说,我不喜欢这种方法。可以做到,但是如果您对此感到困惑,我认为将卡片声明为单个对象然后在集合中移动它们的更标准方法也会更容易和更清晰。
  • @the_storyteller 他使用从 0 开始的编号,而nextInt(51) 只返回 51 个不同的值(包括 0-50),当有 52 个时这是不对的卡片。

标签: java arrays boolean


【解决方案1】:

你可以用布尔值来做,比如

final int SPADES_INDEX = 0;
final int CLUBS_INDEX = 1;
final int HEARTS_INDEX = 2;
final int DIAMONDS_INDEX = 3;

final boolean[] suits = new boolean[4];

// helper function
void switchToSuit(int suitIndex) {
    for(int i = 0; i < suits.length; i++) {
        suits[i] = (suitIndex == i);
    }
}

// later
if(card >= 0 && card <= 14) switchToSuit(SPADES_INDEX);

但这有点不靠谱。如果你愿意,你可以使用比这更简单的ints。

final int SPADES_INDEX = 0;
final int CLUBS_INDEX = 1;
final int HEARTS_INDEX = 2;
final int DIAMONDS_INDEX = 3;

int suit = card / 13; // 0-12 are 0, 13-25 are 1, 26-38 are 2, and 39-51 are 3

更好的方法是使用enum

import java.util.*; 

public class Main {
    static Random rand = new Random();
    static enum Suit {
        SPADES,
        CLUBS,
        HEARTS,
        DIAMONDS;
        public String toString() {
            return name().substring(0, 1);
        }
    }
    static enum Rank {
        ACE("A"), TWO("2"), THREE("3"), FOUR("4"),
            FIVE("5"), SIX("6"), SEVEN("7"), EIGHT("8"),
            NINE("9"), TEN("T"), JACK("J"), QUEEN("Q"), KING("K");
        final String key;
        Rank(String key) {
            this.key = key;
        }
        public String toString() {
            return key;
        }
    }
    public static void main(String[] args) {

        List <String> pocket = new ArrayList<>();
        List <String> board = new ArrayList<>();
        int[] deck = new int[52];
        for (int i = 0; i < 52; i++) {
            deck[i] = i;
        }
        shuffleArray(deck);
        for (int i = 0; i < 2; i++) {
            int card = deck[i];
            Suit suit = Suit.values()[card / 13];
            Rank rank = Rank.values()[card % 13];
            pocket.add("" + rank + suit);
        }
        for (int i = 0; i < 5; i++) {
            int card = deck[i + 2];
            Suit suit = Suit.values()[card / 13];
            Rank rank = Rank.values()[card % 13];
            board.add("" + rank + suit);
        }
        System.out.println("Hold'em pocket: " + pocket);
        System.out.println("Hold'em board: " + board);

    }

    // Fisher–Yates shuffle - https://stackoverflow.com/a/1520212/330057
    static void shuffleArray(int[] ar) {
        // If running on Java 6 or older, use `new Random()` on RHS here
        for (int i = ar.length - 1; i > 0; i--) {
            int index = rand.nextInt(i + 1);
            // Simple swap
            int a = ar[index];
            ar[index] = ar[i];
            ar[i] = a;
        }
    }
}

【讨论】:

    猜你喜欢
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 2022-11-25
    相关资源
    最近更新 更多