在“2”阵列中生成并存储卡片组?

时间:2016-09-08 09:29:15

标签: java arrays random methods return

(预警 - 我知道有类似的问题,但我相信我的不同,因为我希望将套装和排名存放在不同的阵列中。如果社区不这样做,那么我很乐意删除这个问题。)

我正在尝试随机生成一副牌(也就是洗牌)。在函数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);
    }
}

3 个答案:

答案 0 :(得分:3)

  1. Java用于面向对象编程。
  2. 组成很有用。
  3. 您的卡应该是一个班级。 Card.java应如下所示。添加等于方法。

    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 ArrayList<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课程添加了改组。这种洗牌是非常好的洗牌。它有效地随机化了卡的顺序。

答案 1 :(得分:0)

Java没有隐含的元组。

然而,有几种方法可以返回&#34;两个不同数据类型&#34;

  1. 组合物即可。返回具有两个不同数据类型字段的类型对象。
  2. 返回参数。传递两个对象并在方法内填充它们。

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

答案 2 :(得分:0)

Java只能返回一件事,因此该选项消失了。正如您已经说过的那样,您不需要标准方式,但保留两个数组。

所以会有另一个选项,只需将数组传递给方法并在方法中使用它们并将其存储在那里,而不是返回一些东西。

.....
BigDecimal total = new BigDecimal(0);

for (int loop = 0; loop <= 30; loop++) {
    switch (loop) {
        case 0: total.add(new BigDecimal(StringValue here)); break;
        case 1: total.add(new BigDecimal(stringValue here)); break;
        case 2: total.add(new BigDecimal(stringValue here)); break;
        //... and so on.

作为另一个旁注,正确格式化您的代码。如果你这样做会更容易阅读。