如何在java中使用for循环从类创建新对象?

时间:2013-09-30 23:10:59

标签: java class for-loop instance

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

2 个答案:

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