如何使用适当的行号和列号填充2D数组?

时间:2015-04-10 17:57:15

标签: java arrays 2d

这里的Java初学者,已经停留在2D阵列上一段时间了。

所以我想创建一个2D数组来代表一副牌,数组大小为[4,13]:4个套装,每个套装中有13个可能值。

我有这个:

private int[][] deckIndex = new int[4][13];

public void populate deck()
{}

但我不确定如何使用每个值正确填充2D数组。

谢谢!

4 个答案:

答案 0 :(得分:1)

public void populateDeck(){ //NOTE: spaces are not allowed names 
    for(int i = 0 ; i < deckIndex.length ; i++)
        for(int j = 0 ; j < deckIndex[i].length ; j++)
            deckIndex[i][j] = i * 13 + j;
}

public int suitNo(int card){
    return card / 13;
}

public int value(int card){
    return card % 13;
}

虽然我建议使用比整数值更多的代表卡片的方式。

答案 1 :(得分:0)

你可以做到

private int[][] deckIndex = new int[4][13];

public void deck() {
    int count = 1;
    for (int i = 0; i < deckIndex.length; i++) {
        for (int j = 0; j < deckIndex[i].length; j++)
        deckIndex[i][j] = count++;
     count=1;
    }


}

通过这种方法,每行被认为是每种颜色集。对于前

deckIndex[0] represents all the clubs
deckIndex[1] represents all the diamond
deckIndex[2] represents all the spade
deckIndex[3] represents all the heart

答案 2 :(得分:0)

首先,你必须决定你想要在数组中拥有什么。编号卡的编号,好的,但面部呢? 一种选择是只有数字0到13.在这种情况下,你可以简单地使用两个嵌套的for循环。这看起来像这样:

for(int suit=0; suit<cards.length; suit++) {
    for(int card=0; card<cards[0].length; card++) {
        cards[suit][card] = card;
    } 
} 

然而,更加面向对象的方式也会有一个Card类,它包含两个枚举 - 一个用于套装,一个用于值。这可能类似于以下内容:

public class Card {
    private final SuitEnum suit;
    private final ValueEnum value;

    public Card(SuitEnum suit, ValueEnum value) {
        this.suit = suit;
        this.value = value;
    } 

    // getters
} 

public enum SuitEnum {
    SPADES, HEARTS, DIAMONDS, CLUBS
} 

public enum ValueEnum {
    ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING
} 

你可以这样做:

List<List<Card>> cards = new ArrayList<List<Card>>();
for(SuitEnum suit : SuitEnum.values()) {
    List<Card> innerList = new ArrayList<Card>();
    for(ValueEnum value : ValueEnum.values()) {
        innerList.add(new Card(suit, value));
    } 
    cards.add(innerList);
} 

请注意,我在此处切换到2D列表。更灵活,在许多情况下比阵列更受欢迎。

答案 3 :(得分:0)

You can do following : 
for(int i = 0; i < a.length; i++){
    for(int j = 0; j < a[0].length; j++){
        a[i][j] = j+1;
    }
 }