11 Java中的数字随机数

11 Digit random number in Java

我必须生成一个11位的ID号,但是当我使用随机包时,它表示它超出范围,那么我如何才能使它成为11位呢?

1
2
3
4
5
6
7
public static int generateID(){

    Random r = new Random();
    int numbers = 1000000000 + (int)(r.nextDouble() * 999999999);

    return numbers;
}


1
2
3
4
5
6
import java.util.concurrent.ThreadLocalRandom;
...
public long generateId() {
  ThreadLocalRandom random = ThreadLocalRandom.current();
  return random.nextLong(10_000_000_000L, 100_000_000_000L);
}

使用正确的工具。本案例中,Random是小于ThreadLocalRandom值得多。


确保均匀分布nextInt(int bound),你应该使用的方法。

因为它无法产生11位数字的能力超出了int),你需要调用它的负载,例如把9位(000000000 999999999 - 2),和第一位(10~99)。

记得使用长的地方,以防止int溢出。

1
2
long numbers = r.nextInt(1_000_000_000)               // Last 9 digits
             + (r.nextInt(90) + 10) * 1_000_000_000L; // First 2 digits


最大的价值是一个Java 2147483647。十位数字与9,除非你只知道它下面这样的价值。

有一些的方式来处理这将是最简单的,但使用datatype长"而"int"。最大值ALONG是19位,他们支持你的用例。


在这里:

1
int numbers = 1000000000 + (int)(r.nextDouble() * 999999999);

一个8位的数r.nextDouble() * 999999999副车架。这是additioning 1000000000包含10位到8位号码,不包含,包含一个11位的产生。

此外,11位的要求a long需要intAS Integer.MAX_VALUE= = 2147483647(10位)。

Get a 11位数字的号码,你可以做的:

1
 long n = 10000000000L + ((long)rnd.nextInt(900000000)*100) + rnd.nextInt(100);

((long)rnd.nextInt(900000000)*100) + rnd.nextInt(100)归来89 999 999 9990和A之间的数。这会产生一些additionating 10 000 000 000数与数之间的11099 999 999 999

例如,尝试:

1
2
3
public static long generateID() {
      return 10000000000L + ((long)rnd.nextInt(900000000)*100) + rnd.nextInt(100);
}


使用long。这样的:

1
2
3
4
5
6
7
public static int generateID(){

    Random r = new Random();
    long numbers = 1000000000L + (long)(r.nextDouble() * 999999999L);

    return numbers;
}

"L"是明确告诉编译器,我们要ints longs,逆境。