我遇到了这项任务的麻烦,要求我在不使用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);
答案 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);
}
}
}