【问题标题】:How would I create a new object from a class using a for loop in java?如何在 java 中使用 for 循环从一个类中创建一个新对象?
【发布时间】:2013-09-30 23:10:58
【问题描述】:

我有一个名为 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();

【问题讨论】:

  • 第二种方法是正确的,但你想声明一个卡片数组,比如在循环外Card[] cards = new Card[13]。然后,您可以将每个(新)卡分配给循环中的数组cards[i] = new Card()
  • 您似乎在尝试使用可变变量。最好使用集合并按索引访问每个元素。

标签: java class for-loop instance


【解决方案1】:

在循环之前创建您的数组,并将其填充在循环内部。不过最好使用 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,则需要调用 ArrayList 上的 get(...) 方法,这里称为 cardList。更好的是在其构造函数中设置 Card 属性,如我在第二个代码 sn-p 中所示。

【讨论】:

  • 到目前为止,每个人都帮助了我,但这个答案最接近我的工作。我已经有一个 ArrayList 但不知道可以这样做。谢谢。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-24
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    • 2015-06-29
    相关资源
    最近更新 更多