【问题标题】:Getting random numbers in Java [duplicate]在Java中获取随机数[重复]
【发布时间】:2011-08-18 18:22:04
【问题描述】:

我想在 Java 中获得一个介于 1 到 50 之间的随机值。

Math.random(); 的帮助下,我该怎么做?

如何绑定Math.random() 返回的值?

【问题讨论】:

  • 最好使用 Random 而不是 Math.random。随机更有效且偏差更小。

标签: java random


【解决方案1】:

第一个解决方案是使用java.util.Random类:

import java.util.Random;

Random rand = new Random();

// Obtain a number between [0 - 49].
int n = rand.nextInt(50);

// Add 1 to the result to get a number from the required range
// (i.e., [1 - 50]).
n += 1;

另一种解决方案是使用Math.random()

double random = Math.random() * 49 + 1;

int random = (int)(Math.random() * 50 + 1);

【讨论】:

  • 所以如果我至少取 45 并且rand.nextInt(50) 返回 30,我会得到一个介于 45 和 50 之间的值吗?嗯……好吧……
  • @DanielF 的困惑是可以理解的,因为答案中的评论具有误导性。 rand.nextInt(50) 中的 50 在这种情况下只会给出最大值。 rand.nextInt(50) 将返回一个介于 0(包括)和 50(不包括)之间的整数(即 [0-49])。我们加 1 得到 [1-50]。因此,如果您将 45 作为最小值并将其添加到 rand.nextInt(50),您将得到一个介于 45 和 94 之间的值。
  • @The_Rafi 确实如此。 rand.nextInt(1) 只会返回 0,而不是 1 或 0。
  • 注意!! util.Random 已在 Java 8 中实现。
  • 它将输出 1 到 49
【解决方案2】:
int max = 50;
int min = 1;

1。使用 Math.random()

double random = Math.random() * 49 + 1;
or
int random = (int )(Math.random() * 50 + 1);

如果是 int,这将为您提供 1 到 50 的值 或 1.0(含)到 50.0(不含)在双倍的情况下

为什么?

random() 方法返回一个随机数 0.0 到 0.9 之间的数字...,你 乘以 50,所以上限 变为 0.0 到 49.999...当您添加 1 时,它变为 1.0 到 50.999...,现在当您截断为 int 时,您得到 1 到 50。(感谢 cmets 中的@rup)。 leepoint's 这两种方法的精彩文章。

2。在 Java 中使用 Random 类。

Random rand = new Random(); 
int value = rand.nextInt(50); 

这将给出从 0 到 49 的值。

对于 1 到 50:rand.nextInt((max - min) + 1) + min;

Source 一些 Java Random 很棒。

【讨论】:

  • “0.0到50.0,加1就变成1.0到50.0”肯定不对吧?那里一定有 49 或 51。
  • @Blorgbeard 引用错误;结果大于或等于 0 但严格小于 1 ([documentation](download.oracle.com/javase/6/docs/api/java/lang/… )。所以它是 0.0 到 49.999 等,当你添加 1 时,它变成 1 到 50.999 等,变成 1截断为 int 时为 50。
  • 它不适用于所有范围,例如..当我试图获得 28 到 7 之间的数字时,它给了我 31
  • @Maysara 我更新了第二个示例以处理随机范围。具体的例子是使用1-50。
  • 如果你想要 8 到 50 之间的数字,第一个版本你会得到 8 到 58 之间的值。你需要一个这样的公式才能让它正确。 . . . . . (int)(Math.random() * (50-8) + 8)
猜你喜欢
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 2018-10-23
  • 1970-01-01
  • 1970-01-01
  • 2021-09-27
  • 2018-05-15
  • 2017-06-08
相关资源
最近更新 更多