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

3

我使用RandInt()方法时遇到了问题,它无法返回随机整数。结果必须是一个整数范围在0-9之间,并且必须使用math.random类。以下是我的代码:

public class RandNumGenerator {
    public static int RandInt() {
        int n = (int) Math.random() * 10;
        return n;
    }
    public static void main(String[] args) {
        RandInt();
    }
}

1
这实际上是一个关于运算符优先级的问题,与随机数没有太大关系。 - Marko Topolnik
rand.nextInt() 更好,因为其他随机生成器也在内部使用 rand.nextInt()rand.next() - phuclv
1
@LưuVĩnhPhúc 这些信息对于引用“必须使用math.random类”的OP来说没有什么用处。 - Marko Topolnik
还要注意的是,您没有对返回值进行任何操作 - 没有分配它,没有打印它,也没有其他任何操作。 - RealSkeptic
@MarkoTopolnik,真正的问题是为什么作者必须使用math.random。 - Tagir Valeev
4个回答

5
你应该在乘以10后将double转换为int类型:
int n = (int) (Math.random() * 10);

否则你将始终得到0(因为 Math.random()<1.0,因此 (int)Math.random() 总是0)。

3

类型转换的优先级高于*,所以代码如下:

(int) Math.random() * 10;

是相同的意思。
((int) Math.random()) * 10;

由于Math.random()返回的值在范围[0; 1)内(不包括1),因此将其转换为int类型。

(int) Math.random()

将会产生0,乘以10也将返回0

您可能想使用

(int) (Math.random() * 10)

为了更易于阅读和维护,使用Random#nextInt(max)生成范围[0; max)max不包括在内)。


1

你需要在乘法周围加上括号

int n = (int) (Math.random() * 10);

正在发生的是什么。
int n = ((int) Math.random()) * 10;

Math.random()总是大于或等于0且小于1,将其转换为整数将始终等于零。将其乘以10将不起任何作用。


@Pshemo 不,它们都在那里。 - Jezzamon
@Pshemo 啊,说得好。我确实漏了那个。 - Jezzamon

-1

你不应该使用Math.random()来生成随机整数,因为它会生成随机浮点数(即小数)

你应该做类似于这样的事情

Random myRandom = new Random();
int randomInt = myRandom.nextInt(10);

1
必须使用 math.random 类。 - Marko Topolnik
@MarkoTopolnik 要求一个返回浮点数的方法返回整数,这几乎是不可能的。除非你想进行强制类型转换,但当 Math.random 使用 Random 类时这是毫无意义的。 - Storm-
1
在计算中使用一个方法与请求它返回最终结果是不同的。你似乎在对OP的目标进行解释时是孤立的。 - Marko Topolnik
@MarkoTopolnik,在什么情况下将方法的返回值转换为所需类型会比使用不需要转换的方法更好?我唯一能想到的理由是在教育环境中,即使如此,OP也不应该学习低效的方式。 - Storm-
1
所以请向楼主索要他所在教育机构的联系方式,然后抱怨他们的课程设置。与此同时,楼主应该按照作业要求完成任务。 - Marko Topolnik
@MarkoTopolnik 真不错。 - Storm-

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