我必须准备一些工作直到明天,但我被困住了。 (代码中的所有名字都是德语,不要混淆:))
这是我的名为"Karte"
(卡)
private Farbe f;
private Wert w;
public enum Farbe {
PIK, KREUZ, KARO, HERZ
}
public enum Wert {
SIEBEN, ACHT, NEUN, ZEHN, BUBE, DAME, KOENIG, ASS
}
Karte(Farbe f, Wert w) {
this.f = f;
this.w = w;
}
public Farbe getFarbe() {
return f;
}
public Wert getWert() {
return w;
}
public String toString() {
return f + " " + w;
}
现在还有另一个class
应生成object
,由多张卡制作。
正常的语法是
Karte name = new Karte(); // (random stuff here);
但是如何让类生成具有随机名称的多个对象?如果我试图在for each
循环中使用这种代码,它只会覆盖前一个代码。
如何为他们提供随机名称,甚至从String[]
中选择?
答案 0 :(得分:2)
您可以将枚举转换为包含所有值的数组。使用它你可以使用随机类创建类似下面的内容:
public static void main(String[] args)
{
Random r = new Random();
for (int i = 0; i < 10; i++)
{
Karte k = new Karte(Farbe.values()[r.nextInt(Farbe.values().length)], Wert.values()[r.nextInt(Wert.values().length)]);
System.out.println(k);
}
}
答案 1 :(得分:2)
您可以尝试创建一个简单的有序ArrayList<Karts>
,并在其shuffle
订单后获得random
不重复的Karts
列表。
public ArrayList<Karte> getMultipleInstances() {
ArrayList<Karte> instances = new ArrayList<Karte>();
for(Farbe f : Farbe.values()) {
for(Wert w : Wert.values()) {
instances.add(new Karte(f,w));
}
}
Collections.shuffle(instances);
return instances();
}
答案 2 :(得分:1)
您可以创建一个使用java.util.Random的工厂方法来选择属性。
或者你可以在Karte中创建一个随机分配值的空构造函数:
Karte() {
Random rd = new Random();
Farbe[] farbes = Farbe.values();
f = farbes[rd.nextInt(farbes.length)];
Wert[] werts = Wert.values();
w = werts[rd.nextInt(werts.length)];
}
如果您正在寻找如何根据名称存储卡片,您可以将它们映射到像
这样的字符串//Create collection for storing karts
Map<String, Karte> karts = new HashMap<String, Karte>();
for(int i=0; i<10; i++) {
Karte k = new Karte()
karts.put((k.getWert().name()+" "+k.getFarbe.name()), k);
}
答案 3 :(得分:1)
如果你想要多张牌,你应该将它们放在一个集合或一堆或类似的东西上。
只需使用LinkedList<Karte>
并在其上添加新的Karte
即可。
如果你事先不知道卡的数量,你不应该认为你可以给每张卡一个单独的变量名。 如果您确实知道卡的数量和名称,请执行
Karte eins = new Karte(...)
Karte zwei = new Karte(...)
Karte drei = new Karte(...)
...
Karte homo = new Karte(KREUZ, ASS)
Karte schauen = new Karte(PIK, ZEHN)