如何int在特定范围内生成随机值?
我试过以下,但那些不起作用:
尝试1:
randomNum = minimum + (int)(Math.random() * maximum);
// Bug: `randomNum` can be bigger than `maximum`.
Run Code Online (Sandbox Code Playgroud)
尝试2:
Random rn = new Random();
int n = maximum - minimum + 1;
int i = rn.nextInt() % n;
randomNum = minimum + i;
// Bug: `randomNum` can be smaller than `minimum`.
Run Code Online (Sandbox Code Playgroud) 在这种情况下,MAX只有5,所以我可以逐个检查重复,但我怎么能以更简单的方式做到这一点?例如,如果MAX的值为20,该怎么办?谢谢.
int MAX = 5;
for (i = 1 , i <= MAX; i++)
{
drawNum[1] = (int)(Math.random()*MAX)+1;
while (drawNum[2] == drawNum[1])
{
drawNum[2] = (int)(Math.random()*MAX)+1;
}
while ((drawNum[3] == drawNum[1]) || (drawNum[3] == drawNum[2]) )
{
drawNum[3] = (int)(Math.random()*MAX)+1;
}
while ((drawNum[4] == drawNum[1]) || (drawNum[4] == drawNum[2]) || (drawNum[4] == drawNum[3]) )
{
drawNum[4] = (int)(Math.random()*MAX)+1;
}
while ((drawNum[5] == drawNum[1]) ||
(drawNum[5] == drawNum[2]) ||
(drawNum[5] == drawNum[3]) ||
(drawNum[5] == drawNum[4]) )
{
drawNum[5] = (int)(Math.random()*MAX)+1; …Run Code Online (Sandbox Code Playgroud) 我想在Java中创建一组没有重复的随机数.
例如,我有一个数组来存储从0到9999的10,000个随机整数.
这是我到目前为止:
import java.util.Random;
public class Sort{
public static void main(String[] args){
int[] nums = new int[10000];
Random randomGenerator = new Random();
for (int i = 0; i < nums.length; ++i){
nums[i] = randomGenerator.nextInt(10000);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但上面的代码会产生重复.如何确保随机数不重复?
我有一个方法,它使用随机样本来近似计算.这种方法被称为数百万次,因此选择随机数的过程非常有效.
我不确定javas Random().nextInt真的有多快,但我的程序似乎并没有像我想的那样受益.
选择随机数时,我会执行以下操作(半伪代码):
// Repeat this 300000 times
Set set = new Set();
while(set.length != 5)
set.add(randomNumber(MIN,MAX));
Run Code Online (Sandbox Code Playgroud)
现在,这显然有一个糟糕的最坏情况运行时间,因为理论上的随机函数可以为永恒添加重复数字,从而永远保持在while循环中.但是,数字是从{0..45}中选择的,因此重复的值大部分都不太可能.
当我使用上面的方法时,它只比我的其他方法快40%,这不是近似的,但会产生正确的结果.这大约跑了100万次,所以我期待这种新方法至少快50%.
您对更快的方法有什么建议吗?或许你知道一种更有效的方法来生成一组随机数.
澄清一下,这是两种方法:
// Run through all combinations (1 million). This takes 5 seconds
for(int c1 = 0; c1 < deck.length; c1++){
for(int c2 = c1+1; c2 < deck.length; c2++){
for(int c3 = c2+1; c3 < deck.length; c3++){
for(int c4 = c3+1; c4 < deck.length; c4++){
for(int c5 = c4+1; c5 < deck.length; c5++){
enumeration(hands, cards, deck, c1, c2, c3, …Run Code Online (Sandbox Code Playgroud) 我想生成0到9范围内的四个随机数.使用Java Random类生成四个随机数很容易.
Random random = new Random();
int numbers[] = new int[4];
for(int i=0;i<4;i++){
numbers[i] = random.nextInt(10);
}
Run Code Online (Sandbox Code Playgroud)
有了这个,我可以得到四个数字的易象,数组9369,4702等.在这种情况下,有可能在四个数字被重复了许多可能性,我不想在这样的数字重复.
在这里,我想所有的四位数以上阵列是唯一的,这样我可以输出像9543,1234等.
为此,我想到了以下方式.
有没有比上述方法更好的方法,以便我可以轻松快速地获得四个独特的随机数?
任何建议都表示赞赏.
我想在0-500范围内创建10个随机数.但问题是我希望这些数字是唯一的.对于2个随机数,我可以创建如下内容:
int randomItem1 = r.nextInt(500);
int randomItem2 = r.nextInt(500);
while(randomItem1==randomItem2){
randomItem1=randomItem();
randomItem2=randomItem();
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做10,我认为它会堆叠.而且我这样说是因为我正在尝试创建一个巨大的算法,它试图进行连续的评估,我想要不断地获取10个随机和唯一的数字.我不知道该怎么办.任何想法或建议?
我目前正在使用Java的RNG Random r = new Random(),并在while循环中生成0到5之间的新整数.
while (someBoolean == false) {
int i = r.nextInt(6);
....
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是从范围中删除一个数字(例如,4),以便RNG仍然生成0到5之间的新数字,不包括其中一个值.
我目前最好的选择是:
while (someBoolean == false) {
int i = r.nextInt(6);
if (i == removedInt) { continue; }
....
}
Run Code Online (Sandbox Code Playgroud)
但是我担心这可能导致我的代码长时间运行,其中RNG不断返回我不想要的数字.
[ 为清楚起见; 返回的数字是Connect4网格或2D int数组中的列.该方法是随机地将列移动到列中,直到列填满为止,此时我不再希望能够在该列中播放.]
任何帮助赞赏:)
我有这个方法为这个方法中列出的每个数组值生成一个数字(1-10).我希望将整组数字显示为一组唯一数字.这该怎么做?
public static int generateNumbers(int[] lotteryNumbers) {
Random randNum = new Random();
lotteryNumbers[0] = randNum.nextInt(10);
lotteryNumbers[1] = randNum.nextInt(10);
lotteryNumbers[2] = randNum.nextInt(10);
lotteryNumbers[3] = randNum.nextInt(10);
lotteryNumbers[4] = randNum.nextInt(10);
return lotteryNumbers[4];
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
在Java中生成唯一的随机数
代码将从一个范围生成6个随机数,但需要它们是唯一的融化我的大脑任何指针将非常感激
import java.util.Random;
import java.util.Arrays;
public class numbers
{
private int[] lottoNumbers;
private int nextInt;
private Random r;
public numbers()
{
lottoNumbers = new int [6];
r = new Random();
nextInt();
}
public void nextInt()
{
System.out.print("*** ");
for (int i = 0; i < lottoNumbers.length; i++)
{
lottoNumbers[i] = r.nextInt(49) +1;
System.out.print(" " + lottoNumbers[i]);
}
System.out.println(" ***");
}
}
Run Code Online (Sandbox Code Playgroud) 这里的数字生成:
for( int i=0; i<3; i++) {
int randomNumbers = random.nextInt(10) + 1;
}
Run Code Online (Sandbox Code Playgroud)
在这里我可以收到相同的数字。
例如:5,7,5;
但我只需要接收不同的数字:5,1,9.
有没有可能用一些小代码或者我应该为它写一些方法?
我已经尝试了论坛中的一些解决方案,但对我没有用,如果答案是用科特林语言提供的,那么对我会有所帮助。