我有一个名为Card的类,我有这个for循环:
int i;
for (i = 0; i < 13; i++) {
Card cardNameHere = new Card();
}
我想要做的是根据for循环创建新实例。因此,例如,我希望名称为card1,card2,card3等。该数字将来自for循环。
我试过这个并且它似乎不起作用:
int i;
for (i = 0; i < 13; i++) {
Card card[i] = new Card();
}
谁能告诉我我做错了什么?
感谢。
所以我使用Hovercraft Full Of Eels的解决方案,但我还有另外一个问题。
我正在使用cardList.add(new Card()); ,当我尝试使用Card(i)设置名称时,java不会让我这样做。使用它没有我工作正常,但我如何访问它所以我可以调用其他方法,如setId。我想调用cardName.setId();
答案 0 :(得分:5)
在循环之前创建数组,并将填入循环中。最好使用ArrayList。
List<Card> cardList = new ArrayList<Card>();
for (i = 0; i < MAX_CARD; i++) {
cardList.add(new Card());
// or new Card(i) as the case may be
}
如果您正在填写一副牌,并且您的套装和等级枚举很好,那么:
List<Card> cardList = new ArrayList<Card>();
for (Suit suit: Suit.values()) {
for (Rank rank: Rank.values()) {
cardList.add(new Card(suit, rank));
}
}
修改强>
您在评论中说明:
所以我使用的是cardList.add(new Card()); ,当我尝试使用Card(i)设置名称时,java不会让我这样做。使用它没有我工作正常,但我如何访问它所以我可以调用其他方法,如setId。我想调用cardName.setId();
Card(i)
没有意义,因为你不能将Card类视为一种方法 - 再次我甚至不知道该怎么做,你想要做什么这里。如果需要从ArrayList中提取Card,则需要在ArrayList上调用get(...)
方法,此处称为cardList
。更好的方法是在我的第二个代码片段中显示其构造函数中的Card属性。
答案 1 :(得分:3)
在Java中,必须在编译时知道变量名。即使在其他语言(如JavaScript)中,如果不是这样,最好不要尝试在运行时动态创建变量。
这正是数组要解决的问题:当您在编译时拥有已知类型但未知数量的项目时。您需要将卡声明为数组:Card[] cards
Card[] cards = new Card[13];
for (int i = 0; i < cards.length; i++) {
cards[i] = new Card();
}
注意我将for循环更改为循环到cards.length,这是在运行时计算出来的,因此13不必在两个地方进行硬编码。