【问题标题】:Generating very large random numbers java生成非常大的随机数java
【发布时间】:2011-11-23 15:25:30
【问题描述】:

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

【问题讨论】:

    标签: java random biginteger largenumber


    【解决方案1】:

    嗯,一种方法是转到Random.org 并下载其中一个二进制随机文件。这些文件是由大气噪声生成的,因此非常随机。我将它用于我的国际象棋引擎中的 Zobrist 键。

    你也可以去

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

    它会给你你想要的。在这个例子中,一个由 256 位组成的 BigInteger。

    【讨论】:

    • +1。文档中有四个构造函数,我没看到:D。
    【解决方案2】:

    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);
        }
    }
    

    【讨论】:

    • 您能解释一下这是如何工作的吗?我或多或少对字节部分感到困惑..谢谢
    • 您分配一个字节数组,nextBytes 用随机值填充它,然后将 BigInteger 初始化为该字节序列定义的二进制数。但我认为 Jaco 的解决方案更简洁。
    【解决方案3】:

    你可以输入:

    int number = (int)(Math.random() * 100);

    此外,如果您更改乘数,您可以生成更大的数字:

    int number = (int)(Math.random() * 1000);

    附:您不需要导入类。

    【讨论】:

    • 该问题要求输入 10000 位数字。这个答案甚至没有接近。
    • 1000 位不适合 int 类型的变量。将随机值乘以某个常数使其不是随机的。
    • 虽然这个答案可能适用于小数字,但问题很明显,它适用于非常大(比 int 大得多)的数字。所以这不是一个有效的答案。
    猜你喜欢
    • 2011-07-23
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 2017-09-07
    • 2013-08-02
    相关资源
    最近更新 更多