相关疑难解决方法(0)

如何在Java中生成特定范围内的随机整数?

如何int在特定范围内生成随机值?

我试过以下,但那些不起作用:

尝试1:

randomNum = minimum + (int)(Math.random() * maximum);
// Bug: `randomNum` can be bigger than `maximum`.
Run Code Online (Sandbox Code Playgroud)

尝试2:

Random rn = new Random();
int n = maximum - minimum + 1;
int i = rn.nextInt() % n;
randomNum =  minimum + i;
// Bug: `randomNum` can be smaller than `minimum`.
Run Code Online (Sandbox Code Playgroud)

java random integer

3373
推荐指数
45
解决办法
391万
查看次数

如何有效地在Java中生成安全的随机字母数字字符串?

如何有效地在Java中生成安全的随机(或伪随机)字母数字字符串?

java security algorithm performance

18
推荐指数
5
解决办法
3万
查看次数

SecureRandom的行为

尽管在阅读了很多文章后SecureRandom,我对使用SecureRandomJava中的Security API 感到疑惑.在下面的例子中.

public class SecureRandomNumber {
public static void main(String[] args) throws NoSuchAlgorithmException {

    TreeSet<Integer> secure = new TreeSet<Integer>();
    TreeSet<Integer> unSecure = new TreeSet<Integer>();
    SecureRandom sr = new SecureRandom();
    byte[] sbuf = sr.generateSeed(8);
    ByteBuffer bb = ByteBuffer.wrap(sbuf);
    long d = bb.getLong();
    sr.setSeed(d);

    Random r = new Random();
    r.setSeed(System.nanoTime());
    for (int k = 0; k < 99999; k++) {
        int i = sr.nextInt();
        if (!secure.add(i)) {
            System.out.println("Repeated Secure Random Number");
        } else {
//              System.out.println("************Unique***********");
        } …
Run Code Online (Sandbox Code Playgroud)

java security random algorithm cryptography

8
推荐指数
2
解决办法
2644
查看次数

使用当前时间与无时间的随机数发生器

我想了解使用随机数生成器System.currentTimeMillis()作为种子和使用默认构造函数之间的区别.也就是说,这有什么区别:

Random rand = new Random(System.currentTimeMillis());
Run Code Online (Sandbox Code Playgroud)

还有这个:

Random rand = new Random();
Run Code Online (Sandbox Code Playgroud)

我知道这些数字是伪随机的,但是我还没有完全理解细节,以及它们是如何产生的,在当前时间用作种子时获得的"随机性"水平与使用默认构造函数时.

java random

6
推荐指数
2
解决办法
1万
查看次数

如何获取 Random.nextLong 可返回的所有可能值?

随机#nextLong()文档指出此方法不会返回所有可能的long值:

从此随机数生成器的序列返回下一个伪随机、均匀分布的 long 值。的一般约定nextLong是伪随机生成并返回一个 long 值。该方法nextLong由 Random 类实现,就像通过:

public long nextLong() {
    return ((long) next(32) << 32) + next(32);
}
Run Code Online (Sandbox Code Playgroud)

因为 Random 类使用只有 48 位的种子,所以该算法不会返回所有可能的长值

例如,数字8090327796378429294是可生成的,但数字8090327796378429295不是,即使它们唯一的区别是一个最低有效位,并且值本身是 63 位长。

有一种方法可以通过nextLong()使用以下算法来知道是否可以返回值:

public class JavaRandom {
    private static final long ADD = 0xBL;
    private static final long MULT = 0x5DEECE66DL;
    private static final long TWO16 = 1L << 16;
    private static final long MASK_31 = (1L << …
Run Code Online (Sandbox Code Playgroud)

java random random-seed

5
推荐指数
1
解决办法
63
查看次数

在Java中的一个范围内统一生成安全随机数

如何在一个范围内生成安全的统一随机数?范围可以在0到100之间.(上限不是2的幂).

java.security.SecureRandom似乎提供了范围0..2^n.

java security random

4
推荐指数
2
解决办法
1万
查看次数

Java的java.util.Random可靠吗?

我不禁注意到......在我开始开发我的数学游戏之后(经过不断的调整后将它交给beta测试者,我还没有完成!)我的使用java.util.Random和它的方法nextInt()可能不会被加倍我正在寻找可靠的救世主课程.它是否为像我这样的应用程序生成随机数?//这个应用程序的目的是制作一个对ALL PEOPLE具有挑战性的算术游戏,让你解决整数和浮点参数的问题.我的程序生成的最高数字是一个6位数字,这是因为我用于人类计算器(最高级别)难度的一些不同逻辑,即分裂问题.我正在考虑使用Mersenne twister算法,但我认为算法使用了java.util.Random是这样的:http://docs.oracle.com/javase/7/docs/api/java/util/Random.html#next%28int%29.

此外,我想知道是否建议我使用类似的东西 new java.util.Random(System.currentTimeMillis())

java random mersenne-twister

2
推荐指数
1
解决办法
1363
查看次数