我正在从事涉及模拟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)
随机并不意味着每次都不同。有时会出现重复或相似的值,尤其是当您从这么小的范围(20个值)中选择数字时。
如果您确实希望每个数字都不同于前面的数字,那么您必须自己编程。一种最简单的方法(但不是最有效的方法)是拒绝一个在前一个随机数的距离x内的随机数,然后选择另一个数-重复此操作,直到获得满意的数字为止。