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