我有一堆类似的对象(游戏的卡片是特定的),并希望将它们添加到数组中。手动复制它们看起来相当复杂,所以有更优雅的方法吗?
// the card objects, first number is identifier, rest is information
// the name "card1" etc. come from another part and cant be changed by me!
static Card card1 = new Card(1, "xyz", 0, 3);
static Card card2 = new Card(2, "wer", 1, 1);
static Card card3 = new Card(3, "gub", 0, 0);
...
static Card card100 = new Card(100, "sdf", 4, 0);
// here the cards get added
static Card stapel[] = new Card[] { card1, card2, card3, ... , card100 };
EDIT1 :我现在接受了jrahhalis的回答。在重新思考我想要实现的目标之后,坚持将卡片保持为" card1,card2,..."。只是将另一个数组放入其中会更容易。
答案 0 :(得分:2)
这减少了一些代码。而是将卡分配给变量,然后将这些变量放入数组中,同时定义和分配:
public class SomeClass {
static Card stapel[] = new Card[100];
public SomeClass() {
stapel[0] = new Card(1, "xyz", 0, 3);
stapel[1] = new Card(2, "wer", 1, 1);
stapel[2] = new Card(3, "gub", 0, 0);
}
}
答案 1 :(得分:1)
你可以采取两种方式:
- 使用反射API查找类中的所有Card字段并将它们添加到数组中。 (我不推荐这个)
- 您可以找到一种动态生成Card对象的方法。它看起来像这样:
boolean cardsCompleted = false;
int nr = 0;
List<Card> stapel = new ArrayList<>();
while(! cardsCompleted) {
nr++;
Card temp = new Card(nr,"xyz", 0,0) //You will have to find a way to generate its parameters
stapel.add(temp);
if(nr==52)
cardsCompleted = true;
}
小言论,你的Card对象被声明为静态的事实感觉就像你没有采用干净的面向对象编码方法。
答案 2 :(得分:1)
使用ArrayList对象怎么样?
ArrayList<Card> cards = new ArrayList<Cards>;
cards.add(new Card(100, "sdf", 4, 0));
cards.add(new Card(2, "wer", 1, 1));
cards.add(new Card(3, "gub", 0, 0));
答案 3 :(得分:0)
我认为最好的方法是研究工厂设计模式。熟悉此概念后,您可以将数据作为字符串参数插入。
从长远来看,您可以转换为许多代码的工厂设计模式,因此您将成为更好的程序员。
查看Head First Design Patterns,如果你谷歌它可以找到pdf版本