Java math.random,只生成一个0?
以下代码仅生成0;- 我做错了什么Java math.random,只生成一个0?,java,Java,以下代码仅生成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)
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.0
且小于1.0
您正在将结果强制转换为int
,它返回值的整数部分,因此0
然后1+0-1=0
考虑使用java.util.Random
Random rand = new Random();
System.out.println(rand.nextInt(3) + 1);
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)
话虽如此,若要在某个范围内生成整数值,就应该真正使用方法。它比使用Math\random()
更有效
您可以这样使用它:
Random rand = new Random();
int croll = 1 + rand.nextInt(3);
另请参见:
返回一个带正号的双精度值,大于或等于0.0,小于1.0。返回值是从该范围内以(近似)均匀分布伪随机选择的
int croll =1+(int)Math.random()*3-1;
乙二醇
我们所有的伙伴都向你解释了你获得意外产出的原因
假设您想要生成一个随机的croll
考虑Random
以获得解决方案
Random rand= new Random();
double croll = 1 + rand.nextInt() * 3 - 1;
System.out.println(croll);
Math.random返回一个介于0.0和1.0之间的双精度数,因此它的整数值始终为O。请看强制转换比其他运算具有更高的优先级。我想你的意思是1+(int)(Math.random()*3)@SpiderPig取决于具体情况。确实不清楚OP想要生成什么数字。但我会让他自己决定。谢谢:)@sᴜʀᴇsʜᴀᴛᴛᴀ 我只是用了这样的括号。在这种情况下,输出并不总是0。@sᴜʀᴇsʜᴀᴛᴛᴀ 无问题:)
int croll =1+0*-1;
System.out.println(croll); // will print always 0
Random rand= new Random();
double croll = 1 + rand.nextInt() * 3 - 1;
System.out.println(croll);