怎样才能不使用的Math.random的随机数?(How can I generate a rand

2019-08-02 21:41发布

我的项目需要,我创建一个基本的猜数字游戏,使用JOptionPane的和不使用的Math.random创建随机值。 你会如何去这样做? 我已经完成了除随机数发生器的一切。 谢谢!

Answer 1:

这里的代码进行一个简单的随机数发生器:

public class SimpleRandom {
/**
 * Test code
 */
public static void main(String[] args) {
    SimpleRandom rand = new SimpleRandom(10);
    for (int i = 0; i < 25; i++) {
        System.out.println(rand.nextInt());
    }

}

private int max;
private int last;

// constructor that takes the max int
public SimpleRandom(int max){
    this.max = max;
    last = (int) (System.currentTimeMillis() % max);
}

// Note that the result can not be bigger then 32749
public int nextInt(){
    last = (last * 32719 + 3) % 32749;
    return last % max;
}
}

上面的代码是一个“线性同余发生器(LCG)”,你可以找到一个很好的说明它是如何工作在这里。

Disclamer:

上述设计的代码被用于研究而已,而不是作为一个替代的股票随机或SecureRandom的。



Answer 2:

在JavaScript中使用中等方法。

var _seed = 1234;
function middleSquare(seed){
    _seed = (seed)?seed:_seed;
    var sq = (_seed * _seed) + '';
    _seed = parseInt(sq.substring(0,4));
    return parseFloat('0.' + _seed);
}


Answer 3:

如果你不喜欢的Math.random可以使你自己的随机对象。

进口:

import java.util.Random;

码:

Random rand = new Random();
int value = rand.nextInt();

如果您需要其他类型的不是int,随机将提供布尔,双,浮法,长字节的方法。



Answer 4:

你可以使用java.security.SecureRandom中 。 它有更好的熵。

另外, 这里是一本书的代码数据结构与算法分析Java中 。 它使用相同的算法了java.util.Random。



文章来源: How can I generate a random number without use of Math.Random?
标签: java random