我正在尝试生成一个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位数或更少的数字。
我的实施错了吗?
答案 0 :(得分:12)
考虑每种数字的数量:
所以~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位数字只能看到一个单位数字。