1

我有以下方法:

public LinkedList<Object> init(int counter) {
    LinkedList<Object> list = new LinkedList<Object>();
    double decision, value, key;
    int max1 = 700;
    int max2 = 1000;

    for (int i = 0; i < counter; i++) {
        decision= Math.random();

        if (decision<= 0.2) {
            key = Math.random() * 1.5;
            value= Math.random() * max1 ;
            list.add(new A(value, key));
        } else {
            value= Math.random() * max2 ;
            list.add(new B(value));
        }
     }

     return list;
}

我得到的问题是:如果我调用这个方法使用

init(100);

然后检查结果列表的大小,它并不总是100. 相反,列表中的元素数量取决于我为max1和选择的值max2。例如,如果我选择max2 = 1000000,我最终会得到一个包含大约 15 个元素的列表。我怀疑这与Math.random()工作方式有关,但不知道它是如何发生的。是线程的问题吗?

如果有人想尝试这个,这里是类模板AB(其中的工作不参与其中):

public class A {
    public A(double value, double key) {}
} 

public class B {
    public B(double value) {}
}
4

1 回答 1

5

我怀疑 Math.random() 可能在后台运行线程;我自己没有创建任何额外的线程。

No, Math.random() does not run any threads in the background.

In fact, your function is perfectly fine. I've tested it extensively and it does exactly what one would expect. It always returns exactly counter elements.

I therefore have to conclude that your problem lies elsewhere, i.e. outside the code that you're showing us.

于 2012-12-21T15:40:10.823 回答