目前正在制作一个家庭作业(job)程序,我对通常使用的正常公式的一个方面感到困惑

Math.random() * (max - min) + min

例如,我知道在1 - 1000的范围内,这将非常有效.

抱歉我的无知如果这是个愚蠢的问题...但如果我想要0 - 1000的范围,这个还能用吗?

因为范围1 - 1000(max - min)设为999,然后乘以Math.random(),再加上min...0 - 1000范围将(max - min)设置为1 - 10000,并且不会在末尾添加任何内容,因为它仍然是0.如果我有min作为0,max作为1 - 10000,这仍然有效吗?还是我必须走不同的路由/模式?

推荐答案

让我们把公式分解一下,看看它是否有用!

考虑到Math.random() returns a double which has value 0 <= value < 1,当:

  • min = 1,则公式返回的值介于1(0 * (1000 - 1) + 1 = 1)和999(0.999999... * (1000 - 1) + 1 = 999)之间
  • min = 0,则公式返回0(0 * (1000 - 0) + 0 = 0)到999(0.999999... * (1000 - 0) + 0 = 999)之间的值

所以,min = 0就像你预期的那样有效,但在公式的范围内,你似乎缺少了+1:

用数学生成一个范围内的整数随机数.random()由以下公式完成:

Java相关问答推荐

在Java Stream上调用collect方法出现意外结果

无法处理批处理侦听器中的反序列化异常

解析Javadoc时链接的全限定类名

对于几乎不涉及逻辑的请求,您是否应该使用命令模式?

使用Testcontainers与OpenLiberty Server进行集成测试会抛出SocketException

Mapstruct不能正确/完全映射属性

如何让DTO接受空字符串字段,但如果它们不为空,则应用JPA验证?

与Spring Boot相关的实体未正确保存

JOOQ中的子查询使用的是默认方言,而不是配置的方言

Java ArrayList的整数和数组的泛型

MimeMessage emlMessage=new MimeMessage(Session,emlInputStream);抛出InvocationTargetException

垃圾回收器是否真的删除超出作用域的对象?

在实例化中指定泛型类型与不指定泛型类型之间的区别

活泼的一次判断成语,结果中等

如何在Spring Security中设置一个任何人都可以打开的主页?

try 添加;按流派搜索;在Web应用程序上,但没有;I don’我不知道;It’这个代码错了

始终使用Spring Boot连接mongodb上的测试数据库

如何对 Collectors.Counting() 的结果进行算术运算?

为什么 Rust 原生库在调用函数时会随机崩溃?

java.time - 如何解析各种模式的日期时间格式(具有所有可选时间组件,除了年份)?