在Java中使用3维数组的卡片组

时间:2015-02-01 06:16:03

标签: java for-loop random

我正在制作一副带有三维阵列的牌组。但是当我调用随机卡方法时,它表示卡阵列有一个空值,即使我应该用双循环填充它?

我在卡上查找了其他帖子,但它们通常是2 D或2个不同的数组,而不是3D。谢谢你们任何时间。如果我在编码/想法/帖子中离开,请告诉我,我对Java和堆栈很新。

import java.util.Random;
import java.util.Arrays;
public class Deck {

    String Hearts, Diamonds, Spades, Clubs;
    private String Suit;
    private int Deck [][][];
    private int card [][];


    public void FreshDeck()
    {
        Deck = new int [][][]
                   {{{1,1},{2,1},{3,1},{4,1},{5,1},{6,1},{7,1},{8,1},{9,1},{10,1},{11,1},{12,1}},       //Hearts 
                    {{1,2},{2,2},{3,2},{4,2},{5,2},{6,2},{7,2},{8,2},{9,2},{10,2},{11,2},{12,2}},       //Diamonds 
                    {{1,3},{2,3},{3,3},{4,3},{5,3},{6,3},{7,3},{8,3},{9,3},{10,3},{11,3},{12,3}},       //Spades
                    {{1,4},{2,4},{3,4},{4,4},{5,4},{6,4},{7,4},{8,4},{9,4},{10,4},{11,4},{12,4}}        //Clubs
                   };   
    }

    private void setValue(int index, int value)
        {
            card[index][0] = value;
        }
    private void setSuit(int index, int suit)
        {
            card[index][1] = suit;
        }
    public int Value(int index)
        {
        return card[index][0];
        }
    public int Suit(int index)
        {
        return card[index][1];
        }

    public void setRandomCard()
    {
    Random randomCard = new Random();
    int randomInt = randomCard.nextInt(51);
        for (int i=0; i<12; i++) 
        {
            for (int j=0; j<4; ++j)
            {
                card[i][j] = Deck[randomInt][i][j];
            }
        }       

    }
}

3 个答案:

答案 0 :(得分:1)

如果必须使用数组,请使用2D数组。您的3D数据结构是多余的,因为您已经通过第一维指示了套装,但是您在第三维中再次包含套装指示。

int[][] hearts = Deck[0]; // first element in first dimension is hearts suit
int[] aceOfHearts = hearts[0]; // first element in second dimension is ace
int heartsIndicator = aceOfHearts[1]; // redundant hearts indicator in 3rd dimension

顺便说一句,你的套牌没有国王。

答案 1 :(得分:1)

3D阵列的第一个维度是套装(0到3),第二个是卡片(0到11,没有国王?),第三个是卡片(0代表价值,1代表套装)

如果你想画一张卡片,它会是这样的:card[] = deck[0-3][0-11];(你会得到card,其中card[0]是值,card[1]是适合)。您需要随机化这两个参数以获得随机卡。

不应使用多维数组,而应使用对象(例如,为卡片创建一个类,为卡片创建一个类)。代码更容易理解(+面向对象编程的所有好处!)。

答案 2 :(得分:1)

好的,基于你如何声明和初始化Deck,你有:

  • 表示套件的数组:索引从零到3

  • 在这些内容中,你有一个代表套件中卡片的数组:索引从零到12,

  • 其中,每张卡都表示为一个数组,其中2个元素代表套件编号和套件内的卡片。

然后您尝试按如下方式选择随机卡:

    card[i][j] = Deck[randomInt][i][j];

但是randomInt是一个介于0和51之间的数字。它不会起作用。 card是一个包含整数的二维数组...而不是int[]的二维数组,如Deck

这只是一团糟。


坦率地说,你最好再开始。

我的建议:

  • 不要为此使用数组。 Java是一种面向对象的语言,如果您按照O-O范例进行设计和编码,则效果最佳。

  • 声明Card类来表示卡片。它有两个不可变的字段;即套房和价值。

  • 使用其中一个标准列表类,并创建一个List<Card>来表示每张卡片(或手)。

此外,使用标准的Java标识符约定。