随机生成不重复的正数字数据

生成不重复的随机正整数放入到数组中,写出可执行的代码。

上述语句为一到java笔试题目,以取10010个不重复的正整数数组为例,写了如下的代码:

int[] arr = new int[10];

boolean[] flag = new boolean[100];

 

for(int i=0;i<arr.length;i++){

arr[i] = (int)(Math.random()*100);

int num = arr[i];

System.out.println(num);

 

if(flag[num]){

i --;

}else{

flag[num] = true;

}

}

System.out.println(Arrays.toString(arr));

 

运行结果:

99

47

83

72

83

31

7

81

15

21

70

[99, 47, 83, 72, 31, 7, 81, 15, 21, 70]

很明显,最后的结果将重复的第二次出现的83去除掉了,实现了不重复的功能。

程序运行,生成一个长度为10的整数数组和一个长度100boolean类型的数组。其中整数数组每一个元素初始值都为0boolean类型数组每一个元素初始值都为false。在程序运行进入for循环后,随机为每一个元素取随机值,并且以该随机值为flag数组的下标,进行判断该元素的是否为true。若为true,则表示此次取到的随机值,已经取到了,重复出现,需要去除,需重新进行取随机值;若为false,则表示第一次取到该值,直接存入数组中。


只是在面试时,面试官不认为能实现该功能,让想一想一个简单的方法。后来思考后,写出如下代码:

int[] arr = new int[10];

Set set = new HashSet();

 

for(int i=0;i<arr.length;i++){

arr[i] = (int)(Math.random()*100);

System.out.println(arr[i]);

if(!set.add(arr[i])){

i --;

}

}

System.out.println(Arrays.toString(arr));

 

运行结果:

46

59

46

44

17

98

51

18

83

23

4

[46, 59, 44, 17, 98, 51, 18, 83, 23, 4]

简单方法中,Set集合为不可重复集,用add方法添加元素时,该元素的值第一次出现为true,重复出现则为false。根据set.add(arr[i])的值判定获取的随机数是否重复出现,若重复,则再次获取,若不重复,则直接存入数组中。

你可能感兴趣的:(随机生成不重复的正数字数据)