2017-02-09 89 views
-2

我已经查阅了如何将0-99添加到数组中。但是,我的任务是1-1000000。我只是不断得到真正的大数字和不小的数字。这是否仅仅是因为获得大量的机会要高得多?我只是想确保我做对了。预先感谢任何帮助!在数组中添加随机数字1-1000000?

int a[]= new int[50]; 
for(int i = 0; i < 50; i++) { 
    a[i] = (int)(Math.random() * 10000000); 
} 
+0

取决于你的意思是什么“小” – pvg

+0

那你认为是大量的? –

+1

这是正常情况。如果这些数字都具有相同的分布,那么得到数字> 1000000的概率是0.9,而数字<= 1000000是0.1。更进一步,数字<= 100000的概率为0.01。而这仍然是一个相当大的数字。低于1000的数字有1/10000的概率。我刚刚注意到你在问题本身中使用1mio作为上限,但在代码中使用了10mio。我的价值观基于10mio的上限。 – Paul

回答

0

取决于你通过小数字呼叫什么。

例如,获得低于1000的数字意味着它需要适合降低0.1%的间隔,因为它只是100万中所有数字的0.1%。

此外,请注意,通过这种方式,您将获得介于0和999999(含)之间的数字。要获得1-1000000,您需要添加1:

a[i] = (int)(Math.random() * 10000000)+1; 
+0

感谢您的帮助!我只是在过度思考。 –

0

那么,如果你希望得到低于1000多家,有一个机会1/10000,这转化为0.01%。你的代码是好的,但这些设置得到一个很低的数字是不太可能的

0

是的,大量数据将占主导地位。这是因为有一半的人数超过500,000。同样,9/10的数字超过100,000。所以9/10的数字将有六位数字。

0

[有点正交解决你的问题]

一个可以考虑的选项之一是将根据您的预计发行后的数字洗牌阵列,可所有的数字加一次/某些标号添加多个次/某些素数多次等。

我个人用它来涵盖游戏开发的一些案例。

这里是一个答案,它可以帮助你洗牌:Credits

List<Integer> solution = new ArrayList<>(); 
    for (int i = 1; i <= 6; i++) { 
     solution.add(i); 
    } 
Collections.shuffle(solution);