如何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中生成安全的随机(或伪随机)字母数字字符串?
尽管在阅读了很多文章后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) 我想了解使用随机数生成器System.currentTimeMillis()作为种子和使用默认构造函数之间的区别.也就是说,这有什么区别:
Random rand = new Random(System.currentTimeMillis());
Run Code Online (Sandbox Code Playgroud)
还有这个:
Random rand = new Random();
Run Code Online (Sandbox Code Playgroud)
我知道这些数字是伪随机的,但是我还没有完全理解细节,以及它们是如何产生的,在当前时间用作种子时获得的"随机性"水平与使用默认构造函数时.
在随机#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) 如何在一个范围内生成安全的统一随机数?范围可以在0到100之间.(上限不是2的幂).
java.security.SecureRandom似乎提供了范围0..2^n.
我不禁注意到......在我开始开发我的数学游戏之后(经过不断的调整后将它交给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 ×7
random ×6
security ×3
algorithm ×2
cryptography ×1
integer ×1
performance ×1
random-seed ×1