Java中随机的16位数字函数

时间:2012-03-24 04:00:00

标签: java random

我需要随机使用16位数字。我得到的随机函数不能用大数字。我有这个功能:

 int pin = new Random().nextInt(10000); 

但是,如果我把一个像1000000000000这样的大数字,它将无法工作,因为它不是int,而nextLong对我不起作用。 感谢。

4 个答案:

答案 0 :(得分:3)

您可以连接两个随机数以创建更长的随机数。

所以:

  1. 使用nextInt(100000000)获取一个8位数的随机数。
  2. 将它移位8位数,或左移大约10位。
  3. 获取第二个8位数的随机数。
  4. 按位或两个数字以获得最终的长随机数。
  5. 这有意义吗?

答案 1 :(得分:1)

您可以尝试使用bigInteger,请参阅此帖子以创建随机大整数How to generate a random BigInteger value in Java?

答案 2 :(得分:0)

您可能希望查看documentation for Random.nextInt(int n),其中讨论了所使用的算法,并使其适用于long。

来自文档:

public int nextInt(int n) {
  if (n <= 0)
    throw new IllegalArgumentException("n must be positive");

  if ((n & -n) == n)  // i.e., n is a power of 2
    return (int)((n * (long)next(31)) >> 31);

  int bits, val;
  do {
    bits = next(31);
    val = bits % n;
  } while (bits - val + (n-1) < 0);
  return val;
}

点击链接阅读文档以获取更多信息。

答案 3 :(得分:-1)

如果您希望生成具有N位数的任意大的随机数,请尝试

StringBuffer buf=new StringBuffer();
rng=new Random();
for(int a=0;a<N;a++)
    buffer.append((char) ('0'+rng.nextInt(10)));
return buffer.toString();