我想使用Math.random生成数字1-4(整数)。我只成功获得双打或大双打,并且无法弄清楚如何设置最小值和最大值的限制。
的Math.random(); = 0-1之间的双重身份?
我看到有些人建议这样的事情:num = Math.random()* 60 + 25;但不知道它是做什么的,或者它是如何工作的。
我不确定这是否是一个真正的问题,如果我删除它,请随时告诉我。
编辑:有没有办法让数字不重复,但每次运行程序时仍然是随机的?
答案 0 :(得分:2)
int rand = (Math.random() * 4) + 1;
答案 1 :(得分: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;
答案 2 :(得分:0)
数学中的随机数给出一个介于0和1之间的十进制数。 你需要告诉它在一定的范围内。 就像是: (4 * Math.random())+ 1应该给你1-4我认为。如果我错了,请纠正我。
答案 3 :(得分:0)
Random rand = new Random();
System.out.println(rand.nextInt(4) + 1); // we add 1 because it starts with 0
答案 4 :(得分:0)
如果你真的必须使用Math.random
,你需要乘法(并添加)。
这是非常基本的数学,Math.random()
返回带有正号的double值,大于或等于0.0且小于1.0。
因此将它乘以X将得到一个大于或等于0.0且小于X的数字。将其转换为int以除去小数,如果你只想要偶数,你可以做一些事情,最简单的可能是int even = (notSureIfEven >> 1) << 1;
。 [我有点假设'偶数'数字你实际上意味着'整个'数字,在这种情况下你可以忽略它。]然后如果你不希望范围是0-> X但是Y- &gt; X你只需在结果中添加Y(确保在乘法之前从X中减去Y或你的范围是Y-> X + Y)。
要两次不生成相同的数字,您可以执行不同的操作。一种方法是将您目前生成的所有数字存储在List
中,然后在生成新数字时,检查列表contains
是否已经存在,如果是,则生成一个新数字,直到获得一个不在列表中的(然后当你显然将其添加到列表中时)。另一种方法是将它可以生成的所有数字预加载到列表中,然后从该列表中删除一个随机数。
但这两种方式可能无法很好地扩展到非常大的数字范围。第一个因为它可能会在一个非常长的循环中试图找到它尚未生成的数字,第二个因为你必须在开始时创建一个非常大的列表。 我不确定在范围很大的情况下你能做些什么。