2016-11-25 193 views
1

我正在用Java编写一个通用的蛇游戏,我希望我的苹果在随机坐标上被绘制。但是,当我将坐标设置为基于Math.random()时,两个坐标都会创建相同的Math.random结果。这意味着苹果总是绘制在一条直线上。 (4,4)Math.random()生成相同的数字

//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

您确定*您正在运行的代码与您在此发布的代码相同吗? – Bohemian

+0

Math.random()给出一个大于0且小于1的double值,当你转换为整数时它将总是变为0 – developer

+0

你得到的数字是什么?它总是0吗? – Jobin

回答

1

您将始终得到一个小于20的数字(因为Math.random()会给出一个double值,该值是> = 0和< 1),所以不是可以使用nextInt()方法从java.util.Random,如下所示:

public void drawApple(Graphics2D gfx) { 
    Random random = new Random(); 
    rectCoords(gfx, red, random.nextInt(), random.nextInt()); 
} 

另外,还可以实际使用/通过使用重载方法nextInt(maxNumber)到最大限制设置为随机数maxNumber值random.nextInt(maxNumber)

+1

不正确,结果乘以20,它被提升为'double'类型;全部被截断为'int' – Bathsheba

+1

那么什么?OP乘以'20',所以结果将是'0 <= x <20' – Bohemian

+1

是的,谢谢,我的意思是相同> = 0,更正 – developer