我有以下方法:爪哇 - 许多调用的Math.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;
}
我得到的问题是这样的:如果我叫使用
init(100);
这种方法然后检查结果列表的大小,它并不总是100
。相反,列表中元素的数量取决于我为max1
和max2
选择的值。例如,如果我选择max2 = 1000000
,我最终会列出大约15个元素。我怀疑这与Math.random()
的工作方式有关,但不知道它是如何发生的。是关于线程的问题吗?
如果有人想试试这个,这里是班A
和B
模板(其中不玩成这样的工作方式):
public class A {
public A(double value, double key) {}
}
public class B {
public B(double value) {}
}
问题不在于线程。就您告诉我们的情况而言,您的程序中只有一个线程正在运行。 – Niklas
你有没有在任何地方看到异常?你有代码调用这个try-catch块吗? –
@Niklas:我怀疑Math.random()可能在后台运行一个线程;我自己并没有创建任何额外的线程。 –