如何int在特定范围内生成随机值?
我试过以下,但那些不起作用:
尝试1:
randomNum = minimum + (int)(Math.random() * maximum);
// Bug: `randomNum` can be bigger than `maximum`.
尝试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`.
在这种情况下,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; …我想在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);
        }
    }
}
但上面的代码会产生重复.如何确保随机数不重复?
我有一个方法,它使用随机样本来近似计算.这种方法被称为数百万次,因此选择随机数的过程非常有效.
我不确定javas Random().nextInt真的有多快,但我的程序似乎并没有像我想的那样受益.
选择随机数时,我会执行以下操作(半伪代码):
// Repeat this 300000 times
Set set = new Set();
while(set.length != 5)
    set.add(randomNumber(MIN,MAX));
现在,这显然有一个糟糕的最坏情况运行时间,因为理论上的随机函数可以为永恒添加重复数字,从而永远保持在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, …我想生成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);
    }
有了这个,我可以得到四个数字的易象,数组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();
}
但是,如果我这样做10,我认为它会堆叠.而且我这样说是因为我正在尝试创建一个巨大的算法,它试图进行连续的评估,我想要不断地获取10个随机和唯一的数字.我不知道该怎么办.任何想法或建议?
我目前正在使用Java的RNG Random r = new Random(),并在while循环中生成0到5之间的新整数.
while (someBoolean == false) {
        int i = r.nextInt(6);
           ....
 }
我想要做的是从范围中删除一个数字(例如,4),以便RNG仍然生成0到5之间的新数字,不包括其中一个值.
我目前最好的选择是:
 while (someBoolean == false) {
        int i = r.nextInt(6);
           if (i == removedInt) { continue; }
          ....
 }
但是我担心这可能导致我的代码长时间运行,其中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];
}
可能重复:
在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("     ***");
}
}
这里的数字生成:
for( int i=0; i<3; i++) {
    int randomNumbers = random.nextInt(10) + 1; 
}
在这里我可以收到相同的数字。
例如:5,7,5;
但我只需要接收不同的数字:5,1,9.
有没有可能用一些小代码或者我应该为它写一些方法?
我已经尝试了论坛中的一些解决方案,但对我没有用,如果答案是用科特林语言提供的,那么对我会有所帮助。