好吧,我猜这完全是主观的,但我正在考虑随机数生成器的熵源.大多数发电机都按当前时间播种,对吗?好吧,我很好奇其他资源可以用来生成完全有效的,随机的(宽松的定义)数字.
使用多个来源(例如时间+当前硬盘寻找时间[我们在这里是非常奇妙的])一起创建一个比单个来源更"随机"的数字?来源数量的逻辑限制是什么?真的够多少钱?选择时间只是因为方便吗?
如果不允许这种事情,请原谅我,但我对这些消息来源背后的理论感到好奇.
我在我的一个程序中运行这段代码.
public String[] gen_phase_zero() {
Random generator = new Random();
int r = generator.nextInt(2);
if (r == 1) {
String big = "A";
String small = "a";
return new String[] { big, small };
} else {
String big = "B";
String small = "b";
return new String[] { big, small };
}
}
Run Code Online (Sandbox Code Playgroud)
如果我运行这几次我的输出是这样的.
Aa Aa Aa Aa Bb Aa Aa Aa Bb
按顺序它并不是真的.但它几乎从未接近50/50
我不是在考虑五十五,但似乎如果首先选择"Aa",那么它将接下来大约3次,但如果首先选择Bb,那么它也将在接下来的三次被选中.
我正在从事涉及模拟802.11 MAC协议的无线项目。我在其中使用了随机生成器,问题是我们变得越来越不稳定而不是平滑图,我相信这个错误是由于随机生成器造成的。为了进行测试,我运行了下面的代码,该代码生成0到19之间的100个随机数。如果仔细查看输出,那么会有几个连续的数字相同或非常接近(例如17,15,15,16 ...或1,1 ,...)。这会导致在我们的仿真中发生碰撞,并且相应的吞吐量在该点下降(即,变形)。在这种情况下,增加仿真运行时间并没有太大帮助。
谁能帮我弄清楚如何在Java循环中生成真正随机的n个随机数(没有这种模式)?
这是尝试的代码:
import java.util.Random;
public class RandomTest {
public static void main(String[] args){
int [] counter = new int [20];
Random generator = new Random();
int randomIndex = 0;
for (int i=0; i<100; i++){
randomIndex = generator.nextInt(20);
counter[randomIndex]++;
System.out.println(randomIndex);
}
}
}
Run Code Online (Sandbox Code Playgroud)