这里的Java初学者,已经停留在2D阵列上一段时间了。
所以我想创建一个2D数组来代表一副牌,数组大小为[4,13]:4个套装,每个套装中有13个可能值。
我有这个:
private int[][] deckIndex = new int[4][13];
public void populate deck()
{}
但我不确定如何使用每个值正确填充2D数组。
谢谢!
答案 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;
}
}