11 Java中的数字随机数

时间:2017-10-13 19:51:21

标签: java random digit

我必须生成一个11位数的ID号,但是当我使用随机包时,它说它超出了范围,那么我怎么能把它变成十一个呢?

public static int generateID(){

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

    return numbers;
}

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

为确保均匀分布,您应使用nextInt(int bound)方法。

由于它无法生成11位数字(超过int的容量),因此您需要将其调用两次,例如获取最后9位数字(000000000-999999999)和前2位数字(10-99)。

请记住在某处使用long以防止int溢出。

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

答案 2 :(得分:1)

这里:

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

r.nextDouble() * 999999999生成一个8位数的数字 将包含10位数字的1000000000添加到包含8位数的数字将永远不会产生包含11位数的数字。

此外,11位数字需要long而不是int Integer.MAX_VALUE == 2147483647(10位数)。

要获得11位数字,您可以执行以下操作:

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

((long)rnd.nextInt(900000000)*100) + rnd.nextInt(100)会在089 999 999 999之间返回一个数字 将此号码添加到10 000 000 000会在110之间生成99 999 999 999位数字。

例如,试试:

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

答案 3 :(得分:1)

Java' int'的最大值是2147483647.十位数,只有9位,除非你将它限制在该值以下。

有几种方法可以解决这个问题,但最简单的方法是使用数据类型' long'而不是' int'。长期'的最大值是19位数,应该支持您的用例。

答案 4 :(得分:0)

使用long。像这样:

public static int generateID(){

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

    return numbers;
}

“L”要明确告诉编译器我们需要long s,而不是int s。