1

我想使用 Math.random 生成数字 1-4(整数)。我只成功地获得了双打或大双打,并且无法弄清楚如何设置最小值和最大值的限制。

数学.随机();= 0-1 之间的东西作为双精度数?

我见过有人提出这样的建议:num = Math.random() * 60 + 25; 但不知道它是做什么的,也不知道它是如何工作的。

我不确定这是否是一个真实的问题,如果我应该删除它,请随时告诉我。

编辑:有没有办法不让数字重复,但每次运行程序时仍然是随机的?

4

5 回答 5

2
int rand = (Math.random() * 4) + 1;
于 2013-10-09T03:37:33.543 回答
1

Math.Random这里是多余的,使用Random类。

Random rand = new Random();
rand.nextInt(4)+1; //starts at 0, so add 1

通过以下方式导入此类:

import java.util.*;或者import java.util.Random;

于 2013-10-09T03:28:45.433 回答
0

数学中的随机数给你一个介于 0 和 1 之间的十进制数。你需要告诉它在一定范围内。类似: (4*Math.random())+1 我认为应该给你 1-4 之间的值。如果我错了任何人,请纠正我。

于 2013-10-09T03:31:14.313 回答
0
  Random rand = new Random();
  System.out.println(rand.nextInt(4) + 1); // we add 1 because it starts with 0
于 2013-10-09T03:35:30.343 回答
0

如果您确实必须使用,则Math.random需要相乘(和相加)。很基础的数学,Math.random()

返回一个带正号的双精度值,大于或等于 0.0 且小于 1.0。

因此,将它与 X 相乘将得到一个大于或等于 0.0 且小于 X 的数字。将其转换为 int 以消除小数,如果您只想要偶数,您可以做一些事情,最简单的可能是int even = (notSureIfEven >> 1) << 1;. [我有点假设对于“偶数”数字,您实际上是指“整数”数字,在这种情况下您可以忽略它。] 然后,如果您不希望范围为 0->X 但 Y-> X 您只需将 Y 添加到结果中(确保在乘法之前从 X 中减去 Y,否则您的范围将是 Y->X+Y)。

要不两次生成相同的数字,您可以做不同的事情。一种方法是将到目前为止生成的所有数字存储在 a 中List,然后当您生成新数字时,检查列表contains中是否已经存在该数字,如果是,则生成一个新数字,直到您得到一个不在列表中的数字(并且然后当你显然将它添加到列表中时)。另一种方法可能是将它可以生成的所有数字预加载到一个列表中,然后从该列表中删除一个随机数。

不过,这两种方式可能都不能很好地扩展到非常大的数字范围。第一个,因为它可能会进入一个很长的循环,试图找到它尚未生成的数字,第二个是因为你必须在开始时创建一个非常大的列表。我不确定在非常大的范围内是否可以做一些事情。

于 2013-10-09T04:00:16.470 回答