生成一个介于1和2之间的数字java Math.random()

生成一个介于1和2之间的数字java Math.random(),java,math,random,Java,Math,Random,我正在使用导入的math.random()类创建1到2之间的数字范围 以下是我如何让它工作到目前为止,但我不知道它将如何工作: int tmp = (int)(Math.random()*1)+1; 有人知道这是否真的能达到射程吗?如果不是。。然后呢 编辑:查找数字1或2 int tmp = (int) ( Math.random() * 2 + 1); // will return either 1 or 2 Math.random()返回[0,1)中的数字。因为(int)总是向下取整(楼

我正在使用导入的math.random()类创建1到2之间的数字范围

以下是我如何让它工作到目前为止,但我不知道它将如何工作:

int tmp = (int)(Math.random()*1)+1;
有人知道这是否真的能达到射程吗?如果不是。。然后呢

编辑:查找数字1或2

int tmp = (int) ( Math.random() * 2 + 1); // will return either 1 or 2

Math.random()
返回
[0,1)
中的数字。因为
(int)
总是向下取整(楼层),所以实际上需要范围
[1,3)
,这样
[1,2)
将被取整为1和
[2,3)
将四舍五入为2。

如果您希望值1或2的概率相等,那么
int temp=(Math.random()好的,您希望使用
Math.random
,但是您可以使用
java.util.random
,因此不需要进行强制转换或四舍五入:

    java.util.Random random = new java.util.Random();
    int tmp = random.nextInt(2) + 1;
试试这个

int tmp = (int)( Math.floor( Math.random() + 1.5 ) )
Math.random()->[0,1)

Math.random()+1.5->[1.5,2.5)

因此,当你发言时,它要么是1,要么是2,等于
概率,因为
[1.5,2.5)=[1.5,2)U[2,2.5]


和<代码>长度([1.5,2))=长度([2,2.5))=0.5

1和2之间没有整数。那么你想实际生成什么?不是真的,你应该做<0.5,而不是@peter.petrov数学上这是CDF的离散反演,CDF是
@peter.petrov这也很容易将混合物分解成不同的比例。只需改变比例在测试中,对一个新目标的偏差值。@peter.petrov我想你可以争辩说,数学上你有两个相等的范围,而技术上我没有。你的范围需要更多的计算,只需一根头发(添加、地板和铸造,而不是一次比较)。我不认为任何统计测试都可以根据人们实际可能得出的样本大小来判断结果的差异。好的,我想我明白了。谢谢。+1我在看这些答案,想知道为什么没有人使用
Random
。特别是因为你可以用
SecureRandom
来代替它。我用这段代码我们应该在课程和数学中说,一门课。random()是唯一一门随机教授的课。它是
java.util
的一部分,这门课是用来解决这类问题的。+1,但你不需要
math.floor