生成非常大的随机数 Java

12

在Java中如何生成非常大的随机数?我说的是像10000位数字这样的东西。我知道我们必须使用BigInteger,但我们该如何做到这一点?最有效的方法是什么?请提供一个小例子。谢谢。

3个回答

22

有一种方式是访问Random.org,并下载一个二进制随机文件。这些文件是从大气噪声中生成的,因此非常随机。我在我的棋盘引擎中使用它来进行Zobrist密钥计算。

另外,您还可以:

BigInteger b = new BigInteger(256, new Random());

这将会给你想要的东西。在这个例子中,是由256位组成的BigInteger。


2
+1。在文档中有四个构造函数,我没有看到它 :D。 - Vlad

9

Random.nextBytes(byte[])BigInteger(byte[])结合使用。

import java.util.*;
import java.math.*;
class Test{
    public static void main(String[]_){

        int n = 16;

        Random r = new Random();
        byte[] b = new byte[n];
        r.nextBytes(b);
        BigInteger i = new BigInteger(b);

        System.out.println(i);
    }
}

你可以解释一下这是如何工作的吗?我对字节部分有些困惑。谢谢。 - Jeel Shah
你分配了一个字节数组,nextBytes用随机值填充它,然后BigInteger被初始化为由该字节序列定义的二进制数。但我认为Jaco的解决方案更简洁。 - Vlad

-3
你可以直接输入以下代码: int number = (int)(Math.random() * 100); 如果你改变乘数,还可以生成更大的数字: int number = (int)(Math.random() * 1000); 附注:你不需要导入任何类。

4
问题要求提供一万位数的数字,而这个答案根本不接近。 - TT.
1000个数字无法适应int类型的变量。将随机值乘以某个常数会使其不再是随机的。 - gudok
虽然这个答案对于小数可以起作用,但问题明确说明它是针对非常大的(比int大得多)数字的。因此,这不是一个有效的答案。 - Stefan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接