随机生成对象

时间:2014-04-02 11:23:39

标签: java object random

我必须准备一些工作直到明天,但我被困住了。 (代码中的所有名字都是德语,不要混淆:))

这是我的名为"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[]中选择?

4 个答案:

答案 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)