如何使用 math.random 生成随机整数?

16

如何使用 Math.random 生成随机整数?

我的代码是:

int abc= (Math.random()*100);
System.out.println(abc);

它只打印出0,我该怎么修复它?


8
这段代码不应该打印0,而应该无法编译。 - Roger Lindsjö
那是哪个版本?第一行给了我“类型不匹配:无法将double转换为int”,这正是我所期望的。 - Roger Lindsjö
@GworfHi 对于0-100,请使用int abc= (int)Math.random()*101; - God
@神啊,没有先乘以101来进行 Math.random() 呈现的意味着 abc 将永远是0。你需要这样做:int abc = (int)(Math.random()*101); - user3932000
7个回答

27

将 abc 转换为整数。

(int)(Math.random()*100);

8
需要注意的是,这会生成0-99之间的数字。 - Mike Kwan
随机生成一个介于1到100之间的整数:(int)(Math.random()*100+1)); - Russell
@Russell,不过那个已经不再生成0了。 - Spectric

22

为了使您的代码编译,您需要将结果强制转换为int。

int abc = (int) (Math.random() * 100);

然而,如果你使用 java.util.Random 类,它已经为你内置了方法。

Random random = new Random();
int abc = random.nextInt(100);

17

作为一种替代,如果没有特定的原因需要使用Math.random(),可以使用Random.nextInt()

import java.util.Random;

Random rnd = new Random();
int abc = rnd.nextInt(100); // +1 if you want 1-100, otherwise will be 0-99.

(如果没有更为直接的解决方案,通常会感谢对下投票进行解释,尤其是当无法确定OP是否需要更为简单的解决方案时。) - Dave Newton
为什么?一个比另一个更随机吗? - user3932000
我不知道有没有其他的解释,但这样更清晰明了。 - Dave Newton
更推荐使用这种方法,比使用 Math.random 更加简洁。 - AdityaKapreShrewsburyBoston

0

你正在导入java.util包。这就是为什么它会出错的原因。在java.util包中也有一个random()方法。请删除导入java.util包的导入语句。然后你的程序将默认使用java.langrandom()方法,然后你的程序将正常工作。记得进行强制转换,即

int x = (int)(Math.random()*100);

0
int abc= (Math.random()*100);//  wrong 

您将会收到以下错误信息

Exception in thread "main" java.lang.Error: 未解决的编译问题:类型不匹配:无法从double转换为int

int abc= (int) (Math.random()*100);// add "(int)" data type

被称为类型转换

如果真实结果是

int abc= (int) (Math.random()*1)=0.027475

然后你会得到输出为“0”,因为它是一个整数数据类型。

int abc= (int) (Math.random()*100)=0.02745

输出结果为2,因为(100*0.02745=2.7456...等等)


(通常情况下,通过缩进四个空格或使用Ctrl-K快捷键将代码格式化为代码是有帮助的。) - Radon Rosborough

-1

你也可以使用以下方式获取1到100之间的随机数:

SecureRandom src=new SecureRandom();
int random=1 + src.nextInt(100);

1
欢迎来到 Stack Overflow!请查看代码格式化,以使其更易读。 - Nico Haase
1
通常情况下,只有在需要加密强度的随机数时才应使用SecureRandom,因为它可能会阻塞等待更多的熵。 - kodi

-4
double  i = 2+Math.random()*100;
int j = (int)i;
System.out.print(j);

这个回答没有任何价值,因为相同的答案在3年前已经发布了。 - default locale
最好立即进行类型转换,而不是将其存储到自己的双精度浮点数中,除非您确实需要存储 i - user3932000

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