如何在数组中生成唯一的随机数

时间:2014-05-27 19:54:48

标签: java arrays random unique

我遇到了这项任务的麻烦,要求我在不使用ArrayLists的情况下创建50个随机唯一数字。我需要使用一个布尔数组来检查是否已经生成了随机数。在布尔数组中,每个由50生成的数字将设置为true。防爆。生成数字23会使check [23] = true。我遇到的问题是while循环中的错误,即使没有剩下其他唯一编号,也会继续生成新的随机数。如何在仍使用布尔数组检查唯一性的同时解决此问题。

int rnd;
Random rand=new Random();Random rand=new Random();
int[] nums = new int[50];
boolean[] check = new boolean[51];

rnd = rand.nextInt(50) +1;
for (int k = 0; k<50; k++)
{
    //Loop for when there number is already chosen
    while (check[rnd]==true)
    {
        rnd = rand.nextInt(50) +1;
    }
    //Sets the random unique number to a slot in the array
    if(check[rnd]==false)
    {
        nums[k]=rnd;
        check[rnd]=true;
    }
    rnd = rand.nextInt(50) +1;
}
System.out.println(nums);

2 个答案:

答案 0 :(得分:1)

试试这个:

import java.util.Random;

public class random {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Random myRandom = new Random();
        int[] numbers = new int[50];
        boolean[] check = new boolean[50];
        int amountFilled = 0;
        int trial;
        while (amountFilled < 50) {
            trial = myRandom.nextInt(50);
            if (!check[trial]) {
                check[trial] = true;
                numbers[amountFilled] = trial;
                amountFilled++;
            }
        }
        for (int i = 0; i < 50; i++) {
            System.out.println(numbers[i]);
        }
    }
}

您真正的问题是System.out.println(nums);声明。它不会做你想做的事情。而双Random rand=new Random();。其余代码没问题。我以更清晰/更简单的方式重写了它,但是如果修复了输出语句,那么你已经有用了。

答案 1 :(得分:0)

很少做一些调整:

public class Test {

    public static void main(String args[]){
        int rnd;

        Random rand=new Random();
        int[] nums = new int[50];
        boolean[] check = new boolean[50];
        for (int k = 0; k<50; k++)
        {
            rnd = rand.nextInt(50);

            //Loop for when there number is already chosen
            while (check[rnd])
            {
                rnd = rand.nextInt(50);

            }
//Sets the random unique number to a slot in the array
                nums[k]=rnd;
                check[rnd]=true;

        }

        for(int num : nums){
            System.out.println("\n" + num);

        }

    }
}
相关问题