Java 计算随机数的出现次数

Java 计算随机数的出现次数,java,algorithm,hashtable,Java,Algorithm,Hashtable,我想计算一个随机数的出现。我将从1到100000000中随机选取1000000个数字 例如:当我输入1000时,它将显示1000在这1000000个数字中出现了多少次 下面是我写的代码,但我不知道为什么它总是输出0。你能帮我修一下密码吗 我制作了一个哈希表并将链表放入其中以避免异常,因为100000000的程序内存不足 public static void main(String[] args) { Hashtable<Integer,LinkedList<Integer&

我想计算一个随机数的出现。我将从1到100000000中随机选取1000000个数字

例如:当我输入1000时,它将显示1000在这1000000个数字中出现了多少次

下面是我写的代码,但我不知道为什么它总是输出
0
。你能帮我修一下密码吗

我制作了一个哈希表并将链表放入其中以避免异常,因为100000000的程序内存不足

public static void main(String[] args) {

    Hashtable<Integer,LinkedList<Integer>> map
            = new Hashtable<Integer,LinkedList<Integer>>();

    int index;
    int b;
    int x;

    for (b=0; b<1000000; b++){
        x = (int) (Math.random()*1000000000)+1;
        index = x % 10000;

        if(map.get(index) == null){
            map.put(index, new LinkedList<Integer>());
            map.get(index).add(x);
        }else{
            map.get(index).add(x);
        }
    }
publicstaticvoidmain(字符串[]args){
哈希表映射
=新哈希表();
整数指数;
int b;
int x;

对于(b=0;b而言,您的代码可能运行良好。原因如下

使用您的描述进行统计 1000000个从1到100000000的随机数字
这1000次发生了多少次

从1到1000000000之间选择的随机数成为特定数字(如1000)的概率为:

      1
------------- = 0.000 000 001 (very close to zero)
1,000,000,000
如果你做了1000000次,机会是:

0.000 000 001 * 1,000,000 = 0.001 (still pretty close to zero)
要得到1,你必须再乘以1000

这意味着,如果编写的程序与您的描述相匹配,您必须将其运行一千次,以确保您将看到特定数字1000至少出现一次

使用代码段的统计信息 您的实际代码片段似乎与您的描述不匹配。因此,让我们单独查看它

for (b=0; b<1000000; b++){
    x = (int) (Math.random()*1000000000)+1;
    index = x % 10000;
有100000个这样的数字。将其中任何一个作为随机数获得一次的几率为:

由于您重复了1000000次,因此获得
x%10000=0
的几率为:

10000, 20000, 30000, .... 999990000, 1000000000
0.0001 * 1,000,000 = 100 (very very good!)
这意味着,如果您执行
map.get(0).size()

现实检查 我给了它一个测试。事实上,我在几次运行中得到了以下结果。我还插入了
map.get(1000)
,只是为了见鬼

For map.get(0),    size is 92
For map.get(1000), size is 106

For map.get(0),    size is 113
For map.get(1000), size is 92

For map.get(0),    size is 104
For map.get(1000), size is 86

For map.get(0),    size is 111
For map.get(1000), size is 103

您的代码可能运行良好。原因如下

使用您的描述进行统计 1000000个从1到100000000的随机数字
这1000次发生了多少次

从1到1000000000之间选择的随机数成为特定数字(如1000)的概率为:

      1
------------- = 0.000 000 001 (very close to zero)
1,000,000,000
如果你做了1000000次,机会是:

0.000 000 001 * 1,000,000 = 0.001 (still pretty close to zero)
要得到1,你必须再乘以1000

这意味着,如果编写的程序与您的描述相匹配,您必须将其运行一千次,以确保您将看到特定数字1000至少出现一次

使用代码段的统计信息 您的实际代码片段似乎与您的描述不匹配。因此,让我们单独查看它

for (b=0; b<1000000; b++){
    x = (int) (Math.random()*1000000000)+1;
    index = x % 10000;
有100000个这样的数字。将其中任何一个作为随机数获得一次的几率为:

由于您重复了1000000次,因此获得
x%10000=0
的几率为:

10000, 20000, 30000, .... 999990000, 1000000000
0.0001 * 1,000,000 = 100 (very very good!)
这意味着,如果您执行
map.get(0).size()

现实检查 我给了它一个测试。事实上,我在几次运行中得到了以下结果。我还插入了
map.get(1000)
,只是为了见鬼

For map.get(0),    size is 92
For map.get(1000), size is 106

For map.get(0),    size is 113
For map.get(1000), size is 92

For map.get(0),    size is 104
For map.get(1000), size is 86

For map.get(0),    size is 111
For map.get(1000), size is 103

这是一个非常好的机会(>999/1000,更好的统计人员可以计算)您选择的数字被随机选择了0次。@KevinL是对的,这只是创建了哈希表。您不返回任何内容或打印结果…尝试使用较小的数字,例如从1到10的100个随机数字中,有多少是5?然后您可以将其缩放为较大的数字。我尝试循环使用1到100000,但都没有hem返回0。我没有显示您正在使用10000而不是1000检查的输出方法。向我们显示您如何进行输出。这是一个非常好的机会(>999/1000,有更好的统计人员可以计算)您选择的数字被随机选择了0次。@KevinL是对的,这只是创建了哈希表。您不返回任何内容或打印结果…尝试使用较小的数字,例如从1到10的100个随机数字中,有多少是5?然后您可以将其缩放为较大的数字。我尝试循环使用1到100000,但都没有hem返回0。我没有显示您正在使用10000而不是1000检查的输出方法。请向我们显示您如何执行输出。