3

我想创建一个随机 int 值以在多个类中使用。每次我创建这些类的一组新实例时,我都希望将这个新的随机 int 值用于所有这些。随机值应该是相同的。

因此,简而言之,我希望创建一个随机索引,并在多个共同工作以生成数据的类中使用该索引。

这个随机值是否应该在堆栈顶部生成并在每个一起工作的类中静态调用?

4

4 回答 4

6

只需创建一个包含具有随机值的字段的类。提供一个 getter 方法来访问它。然后,与每个新批次的类共享这个类的一个新实例。

例如

private static final Random random = new Random();
private final int randomValue = random.nextInt();

...

public int getRandomValue() {
  return randomValue;
}

这样,每组类的随机数相同,但每组的随机数不同。

于 2013-01-05T22:49:27.113 回答
1

首先通过使用将保存与每个组关联的元数据的专用类来具体化您正在谈论的“组”的概念:

class Group
{
    private int index = -1;

    public Group(int index)
    {
        this.index = index;
    }

    public int getIndex()
    {
        return index;
    }
}

然后将其组信息数据分配给每个类。

如果您在每个对象的实例化之前知道索引,请使用构造函数。请注意,工厂模式可以帮助您封装实例化过程。

如果您稍后知道并且仍然可以访问实例,请使用专用方法:

public void assignToGroup(Group group)

如果您不再有权访问实例,则可以使用一些简单的反转:每个实例都会要求其组:

getMyGroup(this)

到外部方法:

public Group getMyGroup(MyClass instance)
{
    // ... some complex logic to determine the right group based on the instance state ...
}
于 2013-01-05T23:07:08.467 回答
1

这样的事情怎么办

static class Utility {
    private static final int variable = (int)Math.round(1000*Math.random());

        public static int getVariable() {
            return variable;
        }
}

它像 Math.PI 等一样工作,例如

System.out.println(Utility.getVariable());
于 2013-01-05T22:54:56.807 回答
1

只需将其传递给其构造函数中的相关对象即可:

class Main {
    public static void main() {
        Random rnd = new Random();
        for (...) {
            int index = rnd.nextInt();
            // one set of related instances
            Foo f = new Foo(index);
            Bar b = new Bar(index);
        }
    }
}

class Foo {
    int randomIndex;
    public Foo(int randomIndex) {
        this.randomIndex = randomIndex;
        // etc.
    }
}

class Bar { ... }

如果您希望类的实例之间的值不同(无论它们是否同时存在),请不要将其设为 static

于 2013-01-05T22:55:03.520 回答