java公交车随机数_11 Java中的数字随机数

java公交车随机数_11 Java中的数字随机数我必须生成一个11位的ID号,但是当我使用随机包时,它表示它超出范围,那么我如何才能使它成为11位呢?publicstaticintgenerateID(){Randomr=newRandom();intnumbers=1000000000+(int)(r.nextDouble()*999999999);returnnumbers;}int不能比int大,用long代…

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

public static int generateID(){

Random r = new Random();

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

return numbers;

}

int不能比int大,用long代替int

Java的可能复制:随机长数在0

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值得多。

你想知道为什么他们从来没有在Random中添加额外的方法来保持一致。他们似乎认为Random已经过时了,也就是说,如果不把它真正标记为过时的话,就不必费心跟上时代。他们在想什么???????

@安德烈亚斯是的,我仍然想知道为什么他们没有重写Random来使用相同的方法。这完全是错误的…

除此之外,我如何编写一个代码,使每个ID号都是唯一的

@ekin唯一的方法是将所有的ID放在一个Set中,并检查该集合中是否包含一个ID。

我们有没有可能把它放在for循环或其他什么东西上而不是设置

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

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

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

long numbers = r.nextInt(1_000_000_000)               // Last 9 digits

+ (r.nextInt(90) + 10) * 1_000_000_000L; // First 2 digits

最后是一个很有意义的答案,可以使用所有人都能使用的工具。使用double显然是错误的!

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

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

在这里:

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位数字的号码,你可以做的:

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数与数之间的110和99 999 999 999。

例如,尝试:

public static long generateID() {

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

}

还是10位数

在10000000000以下的数字,即0到9999999999实际上不是11位数字。

我指的是(long) (Math.random() * 100_000_000_000L)导致0和99_999_999_999之间的数字(含),但其中10%不是11位长,如42只有2位。

@比以前更糟的是…数字1000000000L有10%的机会被提取,而对方有大约0.000000000 1%…-“-“

使用long。这样的:

public static int generateID(){

Random r = new Random();

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

return numbers;

}

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

实际上,如果您不使用这个大数字的L,那么编译器会自己说您是不对的!

正确的。我们告诉编译器使用long

(long)(r.nextDouble() * 999999999L)给出了0和999999998之间的数字。加上1000000000L给出了1000000000和1999999998之间的数字。这只是10位数字,不是问题中要求的11位数字,甚至不是10位数字的完整范围。

我只是拿着他的密码让它工作。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/34233.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注