【发布时间】:2011-08-18 18:22:04
【问题描述】:
我想在 Java 中获得一个介于 1 到 50 之间的随机值。
在Math.random(); 的帮助下,我该怎么做?
如何绑定Math.random() 返回的值?
【问题讨论】:
-
最好使用 Random 而不是 Math.random。随机更有效且偏差更小。
我想在 Java 中获得一个介于 1 到 50 之间的随机值。
在Math.random(); 的帮助下,我该怎么做?
如何绑定Math.random() 返回的值?
【问题讨论】:
第一个解决方案是使用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);
【讨论】:
rand.nextInt(50) 返回 30,我会得到一个介于 45 和 50 之间的值吗?嗯……好吧……
rand.nextInt(50) 中的 50 在这种情况下只会给出最大值。 rand.nextInt(50) 将返回一个介于 0(包括)和 50(不包括)之间的整数(即 [0-49])。我们加 1 得到 [1-50]。因此,如果您将 45 作为最小值并将其添加到 rand.nextInt(50),您将得到一个介于 45 和 94 之间的值。
rand.nextInt(1) 只会返回 0,而不是 1 或 0。
int max = 50;
int min = 1;
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 这两种方法的精彩文章。
Random rand = new Random();
int value = rand.nextInt(50);
这将给出从 0 到 49 的值。
对于 1 到 50:rand.nextInt((max - min) + 1) + min;
Source 一些 Java Random 很棒。
【讨论】: