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。
该代码的问题在于 1 的可能性是其他数字的两倍(因为当nextInt()
返回 0 或 1 时,您的有效结果为 1)。
最好的解决方案是总是加 1 并从较小的范围内请求随机数:
int rnd = rand.nextInt(num - 1) + 1;
我猜你想得到一个介于 1 和 'num' 之间的随机数。
更通用的方法可以是:
int Low = 1;
int High = 10;
int R = r.nextInt(High-Low) + Low;
这会为您提供一个介于 1(含)和 10(不含)之间的随机数。(或使用 High=11 表示 10 包括在内)
Random random = new Random();
int ran = random.nextInt(9) + 1; //10 is maxRandom value for this code. 1-10
您还可以执行以下操作:
int randomNumber = 0;
do {
randomNumber = rand.nextInt(maxValue);
} while(randomNumber == 0);
只需将边界(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,这本来应该是边界。
尝试这个:
int num,max=10,min=1;
Random r=new Random();
num=r.nextInt(max-min)+1;
您需要在文件开头进行此导入:
import java.util.Random;
不要指望这个功能,Random
你应该自己做。几乎可以对结果做任何事情 - 乘法、加法(例如2*nextInt(n)+1
随机奇数)、对音符频率使用对数刻度、使用地图或枚举来获得随机对象......
方法nextInt(n)
在这里只是为了给你n
不同的值(从0
到n-1
)。不要要求更多,其余的自己实现。如果我很好理解你的问题,你需要 numbers 1..9
,所以你应该要求nextInt(9)+1
get0..8
然后 add 1
。
我希望这个解释有所帮助,我看到了很多答案,但我不喜欢其中任何一个的解释。
尝试:
int num = 10;
Random rand = new Random();
int ran = rand.nextInt(num) + 1;