如何实现一副纸牌?

问题描述 投票:1回答:3

(预警-我知道有与此类似的问题,但我相信我是不同的,因为我希望将西装和军衔存储在不同的阵列中。如果社区有其他意见,那么我将很乐意删除该问题。)

我正在尝试随机生成一副纸牌(又名洗牌)。在generateCard函数中,我正在生成一个等级和一套西服。因此,它本质上只生成一张卡。我还没有包含任何返回值,因为我不知道如何返回两个不同的值,特别是因为它们属于不同的数据类型。我真的很想这样做,因此,如果答案可以抵制提出更有效或更标准的建议的愿望,我将不胜感激。我是一个初学者,了解如何使无效的东西真正起作用,对我有帮助。

总而言之。我的问题是,如何首先返回两个不同数据类型的项目?然后,第二,分别收集收益并将其存储在两个不同的数组中(deckSuitArray和deckRankArray)?

这是我的代码:

package texasHoldem;
import java.util.Random;

public class SingleRound{

    public static void main(String[] args) {

        char[] deckSuitArray = new char[51];
        int[] deckRankArray = new int[51];

        for(int i = 0; i < 53; i++){
            generateCard();
            //wish to cycle though arrays storing random cards at different positions
        }
    }
    public static void generateCard(){ //will remove void
    Random ran = new Random();
    char suit = '0';
    int randomRank = ran.nextInt(13)+1;
    System.out.println(randomRank);

    int randomSuit = ran.nextInt(4)+1;

    switch (randomSuit){

    case 1: suit = 'C'; break;
    case 2: suit = 'S'; break;
    case 3: suit = 'D'; break;
    case 4: suit = 'H'; break;

    }
    System.out.println(suit);
    }
}
java arrays random methods return
3个回答
4
投票
  1. Java用于面向对象的编程。
  2. 合成很有用。

您的卡应该是一类。 Card.java应该如下所示。添加equals方法。

enum Suit {HEART, DIAMONDS, SPADES, CLUBS}
enum Rank {TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE}

public class Card {
    Rank rank;
    Suit suit;
    public Card (Rank r, Suit s) {rank = r; suit = s;} //public constructor
    @Override
    public String toString() {
        return rank.toString() + " " + suit.toString();
    }
}

然后您可以制作一个Deck.java

public class Deck {

    private List<Card> cards;

    public Deck() {
        cards = new ArrayList<>();
        for (Suit s : Suit.values()) {
            for (Rank r : Rank.values()) {
                cards.add(new Card(r, s));
            }
        }
    }

    public void shuffle() {
        Collections.shuffle(cards);
    }
}

[在Deck类中添加了改组。这种洗牌是非常好的洗牌。它有效地使卡片顺序随机化。


0
投票

Java没有隐式元组。

但是有几种方法可以返回“两个不同数据类型的项目”

  1. 组成。返回类型的对象,其中两个字段具有不同的数据类型。
  2. 返回参数。传递两个对象并将其填充到方法中。

    void f(T1 t1, T2 t2) {
       t1 = ...
       t2 = ...
    } 
    

0
投票

Java只能返回一件事,因此该选项消失了。正如您已经说过的,您不希望使用标准方法,而是保留两个数组。

所以会有另一种选择,只需将数组传递给方法并在方法中使用它们,然后将东西存储在这里,而不是返回任何东西。

...
for (int i = 0; i < 53; i++) {
    generateCard(deckSuitArray, deckRankArray);
    // wish to cycle though arrays storing random cards at different
    // positions
}
...
generateCard(char[] deckSuitArray, int[] deckRankArray) {
   ...
   deckSuitArray[someRandomIndex] = suit;
   deckRankArray[someRandomIndex] = randomRank;
   ...
}

作为另一注,请正确设置代码格式。如果您这样做,将更容易阅读。

© www.soinside.com 2019 - 2024. All rights reserved.