我想使用 Math.random 生成数字 1-4(整数)。我只成功地获得了双打或大双打,并且无法弄清楚如何设置最小值和最大值的限制。
数学.随机();= 0-1 之间的东西作为双精度数?
我见过有人提出这样的建议:num = Math.random() * 60 + 25; 但不知道它是做什么的,也不知道它是如何工作的。
我不确定这是否是一个真实的问题,如果我应该删除它,请随时告诉我。
编辑:有没有办法不让数字重复,但每次运行程序时仍然是随机的?
我想使用 Math.random 生成数字 1-4(整数)。我只成功地获得了双打或大双打,并且无法弄清楚如何设置最小值和最大值的限制。
数学.随机();= 0-1 之间的东西作为双精度数?
我见过有人提出这样的建议:num = Math.random() * 60 + 25; 但不知道它是做什么的,也不知道它是如何工作的。
我不确定这是否是一个真实的问题,如果我应该删除它,请随时告诉我。
编辑:有没有办法不让数字重复,但每次运行程序时仍然是随机的?
int rand = (Math.random() * 4) + 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;
数学中的随机数给你一个介于 0 和 1 之间的十进制数。你需要告诉它在一定范围内。类似: (4*Math.random())+1 我认为应该给你 1-4 之间的值。如果我错了任何人,请纠正我。
Random rand = new Random();
System.out.println(rand.nextInt(4) + 1); // we add 1 because it starts with 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
中是否已经存在该数字,如果是,则生成一个新数字,直到您得到一个不在列表中的数字(并且然后当你显然将它添加到列表中时)。另一种方法可能是将它可以生成的所有数字预加载到一个列表中,然后从该列表中删除一个随机数。
不过,这两种方式可能都不能很好地扩展到非常大的数字范围。第一个,因为它可能会进入一个很长的循环,试图找到它尚未生成的数字,第二个是因为你必须在开始时创建一个非常大的列表。我不确定在非常大的范围内是否可以做一些事情。