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

标签 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();(尽管我在实际运行时遇到了一些麻烦)。

当然,我不是唯一尝试同时生成两个随机数的人。我感谢任何看过这篇文章或将我指向类似主题的人。谢谢!

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

最佳答案

在当前代码中,您总是会得到一个小于 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) 来设置随机数的最大限制>.

关于java - Math.random() 生成相同的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40800288/

相关文章:

java - 找不到能够从类型 [java.util.LinkedHashMap<?, ?>] 转换为类型 [java.lang.String] 的转换器 - Spring 配置服务器

java - 如何解决Spring boot @EnableAsync和@Async问题?

java - 应用程序强制关闭,但没有强制关闭消息

java - 将 logcat 输出保存到字符串值

python - 从 python 字典中获取键(和值!)的困惑

java - 如何使用内存文件中的vertx创建可下载文件api

sql-server - 数据库表中的随机记录 (T-SQL)

php - 0 到 1.0 php 之间的随机 float

javascript - 使用 Javascript 从 imgur 中提取随机图像

python - PyCrypto 模块中的 Random 从哪里获取随机字节?