以下代码仅生成0; - ;
我做错了什么?
public class RockPaperSci {
public static void main(String[] args) {
//Rock 1
//Paper 2
//Scissors 3
int croll =1+(int)Math.random()*3-1;
System.out.println(croll);
}
}
编辑,另一张海报提出修复它的东西。 int croll = 1 +(int)(Math.random()* 4 - 1);
谢谢大家!
答案 0 :(得分:21)
您使用的是Math.random()
状态
返回带有正号的
double
值,大于或 等于0.0
且小于1.0
。
您正在将结果转换为int
,它返回值的整数部分,即0
。
然后1 + 0 - 1 = 0
。
考虑使用Random
Random rand = new Random();
System.out.println(rand.nextInt(3) + 1);
答案 1 :(得分:5)
Math.random()
会在范围 - [0.0, 1.0)
之间生成双倍值。然后你将结果转换为int
:
(int)Math.random() // this will always be `0`
然后乘以3
0
。所以,你的表达真的是:
1 + 0 - 1
我想你想把括号括起来:
1 + (int)(Math.random() * 3)
话虽如此,如果要在某个范围内生成整数值,则应该使用Random#nextInt(int)
方法。它比使用Math#random()
更有效。
你可以像这样使用它:
Random rand = new Random();
int croll = 1 + rand.nextInt(3);
另见:
答案 2 :(得分:1)
在Java中随机生成0或1的最简单方法之一:
(int) (Math.random()+0.5);
or
(int) (Math.random()*2);
答案 3 :(得分:0)
public static double random()
返回带有正号的double值,大于或等于0.0且小于1.0。返回值是伪随机选择的,具有来自该范围的(近似)均匀分布。
int croll =1+(int)Math.random()*3-1;
例如
int croll =1+0*-1;
System.out.println(croll); // will print always 0
答案 4 :(得分:0)
我们所有的伙伴都向您解释了您获得意外输出的原因。
假设您要生成随机croll
考虑Random
解决方案
Random rand= new Random();
double croll = 1 + rand.nextInt() * 3 - 1;
System.out.println(croll);