10

我的项目需要我创建一个使用 JOptionPane 并且不使用 Math.Random 来创建随机值的基本数字猜谜游戏。你会怎么做呢?除了随机数生成器之外,我已经完成了所有工作。谢谢!

4

4 回答 4

15

这里是简单随机生成器的代码:

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)”,你可以在这里找到它如何工作的很好的描述。

免责声明:

上面的代码仅用于研究,不能替代股票 Random 或 SecureRandom。

于 2012-11-18T20:20:45.867 回答
5

在 JavaScript 中使用 Middle-square 方法。

var _seed = 1234;
function middleSquare(seed){
    _seed = (seed)?seed:_seed;
    var sq = (_seed * _seed) + '';
    _seed = parseInt(sq.substring(0,4));
    return parseFloat('0.' + _seed);
}
于 2015-07-30T19:31:56.337 回答
1

如果您不喜欢 Math.Random,您可以制作自己的Random对象。

进口:

import java.util.Random;

代码:

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

如果您需要其他类型而不是 int,Random 将提供 boolean、double、float、long、byte 的方法。

于 2012-11-18T17:31:06.337 回答
0

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

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

于 2012-11-18T18:16:47.490 回答