【问题标题】:generating objects randomly随机生成对象
【发布时间】:2014-05-13 15:24:28
【问题描述】:

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

这是我的构造函数类,用于一个名为"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[]中选择?

【问题讨论】:

  • ... 生成多个具有随机名称的对象 随机名称是什么意思?你的意思是变量的名称吗?一些预期结果的例子会有所帮助。您还可以描述为什么需要它,因为它看起来像 XY problem

标签: java object random


【解决方案1】:

您可以将枚举转换为包含所有值的数组。使用它,您可以使用随机类创建如下内容:

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);
    }

}

【讨论】:

    【解决方案2】:

    您可以尝试创建一个简单的有序ArrayList&lt;Karts&gt;,然后在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();
    }
    

    【讨论】:

      【解决方案3】:

      如果你想要多张牌,你应该把它们放在一组或堆叠或类似的东西上。

      只需使用LinkedList&lt;Karte&gt; 并在其上添加每个新的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)
      

      【讨论】:

        【解决方案4】:

        您可以创建一个使用 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);
        }
        

        【讨论】:

        • 这是我的想法,但我不认为这是他要问的。我认为他在谈论随机变量名称。
        • 我添加了简单的生成/存储机制..确实这个问题有点模棱两可。
        • 您的回答现在看起来很完整。 @developer3466402 的回答似乎也不错,以防万一不需要重复卡。
        猜你喜欢
        • 2019-08-02
        • 2015-07-30
        • 2015-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-22
        • 1970-01-01
        相关资源
        最近更新 更多