Java - 许多对Math.random()的调用搞乱了循环

G. *_*ach 1 java random

我有以下方法:

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;
}
Run Code Online (Sandbox Code Playgroud)

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

init(100);
Run Code Online (Sandbox Code Playgroud)

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

如果有人想尝试这个,这里是类的模板AB(其工作原理不适用于此):

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

public class B {
    public B(double value) {}
}
Run Code Online (Sandbox Code Playgroud)

NPE*_*NPE 5

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

不,Math.random()不在后台运行任何线程.

事实上,你的功能非常好.我已经对它进行了广泛的测试,它完全符合人们的期望.它总是返回完全counter元素.

因此,我必须得出结论,你的问题存在于其他地方,即在你向我们展示的代码之外.