2

我有一个名为 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 不会让我这样做。在没有 i 的情况下使用它可以正常工作,但是我如何访问它以便可以在其上调用另一个方法,例如 setId。我想打电话 cardName.setId();

4

2 回答 2

6

在循环之前创建数组,并将其填充循环中。不过最好使用 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
}

如果您正在填充一副纸牌,并且您已经很好地创建了 Suit 和 Rank 枚举,那么:

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 不会让我这样做。在没有 i 的情况下使用它可以正常工作,但是我如何访问它以便可以在其上调用另一个方法,例如 setId。我想调用 cardName.setId();

Card(i)没有意义,因为您不能将 Card 类视为一种方法 - 我什至不知道该怎么做,您在这里尝试做什么。如果需要从 ArrayList 中提取 Card,则需要调用get(...)ArrayList 上的方法,这里称为cardList. 更好的是在其构造函数中设置 Card 属性,如我在第二个代码片段中所示。

于 2013-09-30T23:12:27.660 回答
5

在 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 不必在两个地方都进行硬编码。

于 2013-09-30T23:14:12.880 回答