我不确定我是否提出了正确的问题,但这个问题与我能想到的一样接近。无论如何,我试图制作一个简化版的Solitaire,称为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)......俱乐部王牌(积分值:13),两个俱乐部(积分值:1)等}
我希望它像一副标准纸牌一样生产。
答案 0 :(得分: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;
}
请记住,当您传递它们以正确分配它们并确保它们的长度相同时,您必须按顺序使等级和值对应。您可能希望为此添加警卫。
希望这有帮助!
答案 1 :(得分:0)
制作一副纸牌(52张牌),你有4&#34;套装&#34;和13&#34;排名&#34;为每件衣服。 4 * 13 = 52.但是你为每张正常的卡片制作了#34;每个点值的额外循环?您可以使用enum for suit和enum for rank并使用开关语句(如果您愿意,可以使用 if )为卡片分配值。你不需要额外的循环。你不需要来制作一个枚举。由于你使用字符串,所以完全可以这样做。但是你不应该分配像你现在这样的价值观。例如,您可以将检查值放在卡的构造函数中。