在java中随机生成整数数组的问题

时间:2011-05-19 14:09:03

标签: java arrays random int

我正在尝试生成一个N个整数值在0到100000之间的数组。

以下是代码:

import java.util.*;
public class Main
{

    public static Scanner input = new Scanner(System.in);

    public static void main(String[] args)
    {
        int N;
        System.out.println();
        System.out.print("Enter an integer number: ");
        N = input.nextInt();
        int[] a = new int[N];
        Random generator = new Random();
        for(int i = 0; i < a.length; i++)
        {
            a[i] = generator.nextInt(100001);
        }
    }
}

我注意到,每次生成新数组时,数组中的大多数整数都是5位数,有时会有4位数,很少有3位数,但从未发生过我找到了2位数或更少的数字。

我的实施错了吗?

3 个答案:

答案 0 :(得分:12)

考虑每种数字的数量:

  • 1个6位数字
  • 90000 5位数字
  • 9000个4位数字
  • 900个3位数字
  • 90个2位数字
  • 10个1位数字(包括0)

所以~90%的数字应该是5位数字,只有大约1%的数字应该是3位数或更少。它们会发生,但很少发生。

答案 1 :(得分:6)

似乎错误的是你认为这在某种程度上是奇怪的。

在0到100000之间的数字中,只有1有6位数,大约90%有5位数,9%有4位数,0.9%有3位数,只有0.09%有1位或2位数。因此,给定一个统一的分布(nextInt()实现),你根本看不到它们或根本没有看到它们并不奇怪。如果你想要一个不同的发行版,你必须自己实现它。

答案 2 :(得分:1)

考虑一下......有9 * 10 ^ (n-1)个数字n。这意味着有90000个5位数字和900个3位数字。平均而言,每100个5位数字应该只能看到一个3位数字,而每10000个5位数字只能看到一个单位数字。