在Java中获取随机数

Unk*_*ser 435 java random

可能重复:
Java:生成范围内的随机数

我想在Java中获得1到50之间的随机值.

我怎么能帮忙Math.random();呢?

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

nya*_*nev 712

第一个解决方案是使用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;
Run Code Online (Sandbox Code Playgroud)

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

double random = Math.random() * 49 + 1;
Run Code Online (Sandbox Code Playgroud)

要么

int random = (int)(Math.random() * 50 + 1);
Run Code Online (Sandbox Code Playgroud)

  • @DanielF的困惑是可以理解的,因为答案中的评论具有误导性.`rand.nextInt(50)`中的50只会在这种情况下给出最大值.`rand.nextInt(50)`将返回0(包含)和50(排他)之间的整数(换句话说[0-49]).我们加1得[1-50].因此,如果您将45作为最小值并将其添加到rand.nextInt(50),则包含45到94之间的值. (61认同)
  • @The_Rafi确实.`rand.nextInt(1)`只返回0,而不是1或0. (7认同)
  • 因此,如果我将45作为最小值并且`rand.nextInt(50)`返回30,那么我得到45到50之间的值?嗯...好吧...... (5认同)

zen*_*ngr 594

int max = 50;
int min = 1;
Run Code Online (Sandbox Code Playgroud)

1.使用Math.random()

double random = Math.random() * 49 + 1;
or
int random = (int )(Math.random() * 50 + 1);
Run Code Online (Sandbox Code Playgroud)

如果是int或1.0(包括)到50.0(不包括),这将给出1到50的值,如果是double

为什么?

random()方法返回一个介于0.0和0.9之间的随机数...,你将它乘以50,所以上限变为0.0到49.999 ...当你加1时,它变成1.0到50.999 ...,现在当你截断对于int,你得到1到50.(感谢评论中的@rup).leepoint对两种方法精彩记录.

2.在Java中使用Random类.

Random rand = new Random(); 
int value = rand.nextInt(50); 
Run Code Online (Sandbox Code Playgroud)

这将给出0到49之间的值.

1至50: rand.nextInt((max - min) + 1) + min;

一些Java随机可怕的来源.

  • @Blorgbeard引用错了; 结果大于或等于0但严格小于1([文档](http://download.oracle.com/javase/6/docs/api/java/lang/Math.html#random ()).所以它是0.0到49.999等,当你加1时变为1到50.999等,当你截断为int时变为1到50. (6认同)