8
int num = 10;
Random rand = new Random();
int ran = rand.nextInt(num);
if (ran==0){          
  ran= ran+1;
}
System.out.println("random : "+ran);  

这是我到目前为止编码的内容,有没有更好的方法来做到这一点?我觉得这是随机数为0时的硬编码,我加了1。

4

8 回答 8

30

该代码的问题在于 1 的可能性是其他数字的两倍(因为当nextInt()返回 0 或 1 时,您的有效结果为 1)。

最好的解决方案是总是加 1 并从较小的范围内请求随机数:

int rnd = rand.nextInt(num - 1) + 1;
于 2013-05-02T07:56:02.107 回答
4

我猜你想得到一个介于 1 和 'num' 之间的随机数。

更通用的方法可以是:

int Low = 1;
int High = 10;
int R = r.nextInt(High-Low) + Low;

这会为您提供一个介于 1(含)和 10(不含)之间的随机数。(或使用 High=11 表示 10 包括在内)

于 2013-05-02T08:02:12.973 回答
2
Random random = new Random();
int ran = random.nextInt(9) + 1; //10 is maxRandom value for this code. 1-10
于 2013-05-02T07:58:23.307 回答
1

您还可以执行以下操作:

int randomNumber = 0;
do {
  randomNumber = rand.nextInt(maxValue);
} while(randomNumber == 0);
于 2013-05-02T10:18:48.873 回答
1

只需将边界(num 变量)降低 1 并将 1 添加到 ran 变量

    int num = 10;
    Random rand = new Random();
    int ran = rand.nextInt(num - 1) + 1;
    // or decrease num first n-- and then int ran = rand.nextInt(num) + 1

现在 bound(limit) 是 8 (包括在内,例如,最终的数字总是排他的),如果它是 0,它会增加到 1,如果它是 8,它会增加到 9,这本来应该是边界。

于 2020-11-29T18:05:21.940 回答
1

尝试这个:

int num,max=10,min=1;
Random r=new Random();
num=r.nextInt(max-min)+1;

您需要在文件开头进行此导入:

import java.util.Random;
于 2018-04-13T17:15:52.077 回答
0

不要指望这个功能,Random你应该自己做。几乎可以对结果做任何事情 - 乘法、加法(例如2*nextInt(n)+1随机奇数)、对音符频率使用对数刻度、使用地图或枚举来获得随机对象......

方法nextInt(n)在这里只是为了给你n不同的值(从0n-1)。不要要求更多,其余的自己实现。如果我很好理解你的问题,你需要 numbers 1..9,所以你应该要求nextInt(9)+1get0..8然后 add 1

我希望这个解释有所帮助,我看到了很多答案,但我不喜欢其中任何一个的解释。

于 2014-12-11T16:35:24.070 回答
-1

尝试:

int num = 10;
Random rand = new Random();
int ran = rand.nextInt(num) + 1;
于 2016-12-08T17:11:49.607 回答