我不确定是否提出了正确的问题,但这与我想的差不多。无论如何,我正在尝试制作称为Elevens的纸牌的简化版本。在编译阶段,一切似乎都很好,但是当运行通过时,它并没有按预期运行。以下是与该问题有关的Deck
和DeckTester
类的方法:
注意:我省略了标题和内容Deck
类构造函数和方法之一:
public Deck(String[] suits, String[] ranks, int[] values){
ArrayList<Card> cardslist = new ArrayList<Card>();
for(String suit: suits){
for(String rank: ranks){
for(int value: values){
cardslist.add(new Card(suit, rank, value));
}
}
}
size=cardslist.size();
cards=cardslist;
}
public List<Card> getDeck(){
return cards;
}
DeckTester
主要方法:public static void main(String[] args){
String[] suitsA={"Clubs", "Diamonds", "Hearts", "Spades"};
String[] ranksA={"Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King"};
int[] valuesA={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
String[] suitsB={"Lions", "Giraffes", "Wolves"};
String[] ranksB={"One", "Two", "Three"};
int[] valuesB={1, 2, 3};
Deck a = new Deck(suitsA, ranksA, valuesA);
Deck b = new Deck(suitsB, ranksB, valuesB);
System.out.println(a.getDeck());
System.out.println(b.getDeck());
}
这将产生诸如{Ace of Clubs(积分值:1)... Aces Clubs(积分值:13),两个Clubs(积分值:1)等)的数组结果
我希望它能像标准纸牌一样产生。
最佳答案
您有三个嵌套的for循环,因此您将制作suits*ranks*values
多张卡片,而只想制作suits*ranks
多张卡片。因此:
public Deck(String[] suits, String[] ranks, int[] values){
ArrayList<Card> cardslist = new ArrayList<Card>();
for(String suit: suits) {
for(int i = 0; i < ranks.length; i++) {
cardslist.add(new Card(suit, ranks[i], values[i]));
}
}
size=cardslist.size();
cards=cardslist;
}
public List<Card> getDeck(){
return cards;
}
请记住,传递等级时必须使等级和值相对应,以便正确分配它们并确保它们的长度相同。您可能需要为此添加防护。
希望这可以帮助!