Math.random()生成相同的数字

时间:2016-11-25 08:06:19

标签: java random

我正在用Java编写一个通用的蛇游戏,我希望我的苹果可以在随机坐标上绘制。但是,当我根据Math.random()设置坐标时,两个坐标都会创建相同的Math.random结果。这意味着苹果总是画在线性线上。 (4,4)

//Draws apple
public void drawApple(Graphics2D gfx) {
    rectCoords(gfx, red, (int) Math.floor(Math.random()*20), (int) Math.floor(Math.random()*20));
}
// rectCoords(graphics, color, xcoordinate, ycoordinate)

我认为这是因为他们为种子使用相同的时间值,因为它们是同时被调用的。

我尝试了Math.random()Random个对象,甚至是两者的组合。我已经尝试在整个代码中的不同时间将它们声明为变量,甚至抛出一个Thread.sleep();(虽然我实际上让它工作时遇到了一些麻烦)。

当然,我不是唯一一个试图同时生成两个随机数的人。我感谢任何看过这个或者指向类似线程的人。谢谢!

编辑:我修复了它,这是另一段代码中的一个问题。虽然,不确定如何关闭此线程或标记它已解决...

1 个答案:

答案 0 :(得分:1)

当前代码总是会得到一个小于20的数字(因为Math.random()给出了一个双倍值,即> = 0和< 1),所以你可以使用{{1}来自nextInt()的方法如下所示:

java.util.Random

此外,您实际上可以使用重载方法public void drawApple(Graphics2D gfx) { Random random = new Random(); rectCoords(gfx, red, random.nextInt(), random.nextInt()); } 通过使用/传递maxNumber值nextInt(maxNumber)来设置随机数的最大限制。