如何在Java中获得随机整数?

3
我想获取一个随机整数,但我现在的方法需要很长时间才能得到这个随机数(大约10秒钟!)
Random generator=new Random();
do {
    id=generator.nextInt();
}
while(id<=0||id>=4);

我正在尝试获取一个介于0到4之间(包括0和4)的随机数。 目前这段代码可以完成任务,但10秒太长了! 有更好的方法吗? 谢谢!

你的机器配置是什么? - Aniket Kulkarni
你不需要使用while(id<=0||id>=4)来进行检查,只需简单地指定范围为generator.nextInt(5); - Baby
我认为这会有帮助。https://dev59.com/rWsz5IYBdhLWcg3wWmUy - Vijay Rahul
5个回答

10

You want

generator.nextInt(5);

该函数返回一个0到4之间的随机整数。你原来的代码执行时间很长是因为它一遍遍地生成随机整数,直到生成1到3之间的数。

请注意,由于您丢弃了小于等于0和大于等于4的所有数字,您甚至没有得到您期望的范围。

有关Random类方法的更多信息,请参见http://docs.oracle.com/javase/7/docs/api/java/util/Random.html


3
+1 链接到文档,不要陷入嘲讽或轻蔑的诱惑,只需翻译文本内容。 - jhericks

1
那是因为你生成了数十亿个随机数并将它们丢弃,直到得到一个在0到4之间的随机数。相反,应该这样做:
id = generator.nextInt(5); // number between 0 and 4, inclusive

将来,请阅读您正在使用的类的文档; 这在Javadoc中清楚地解释


1
使用 Math.random() 将其转换为 int
int i=(int)Math.random()*4;

最好使用内置的 nextInt(int) 方法。它更透明和更快速。 - chrylis -cautiouslyoptimistic-

0
只需包括上限(假设您想要1、2或3):
id = 1 + generator.nextInt(3);

javadoc中:

public int nextInt(int n)

返回一个伪随机、均匀分布的 int 值,该值介于 0(包含)和指定值(不包含)之间,来自该随机数生成器的序列。


0
尝试一下这个:
Random random = new Random();
random.nextInt(4);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接