首先自我介绍下,我是刚接触JAVA,学了大概半个月,没什么基础,也不知道发什么,所以就随便发发,希望嘴下留情,错了帮我纠正就好!相信很多跟我一样零基础的刚接触到Random块会碰到这样的一个问题:Random可以随机产生一个数,那么怎么才能让它产生的数字永远不会重复呢?如果不会重复,就可以解决前期所遇到的很多问题。那么怎么做呢?代码如下,如果有没接触到集合的,可以在最下面看数组的。package day05Plus;
import java.util.ArrayList;
import java.util.Random;
public class getRandom {
public static void main(String[] args) {
// 生成 [0-n) 个不重复的随机数
// list 用来保存这些随机数
ArrayList list = new ArrayList();
int n = 10;
Random rand = new Random();
boolean[] bool = new boolean[n];//
int num = 0;
for (int i = 0; i < n; i++) {
do {
// 如果产生的数相同继续循环
num = rand.nextInt(n);
} while (bool[num]);
bool[num] = true;
list.add(num);
}
System.out.println(list);
}
}
//这个思想是这样的,用do...while循环,在do的内部随机产生一个数字num,用num当作索引值放到布尔表达式中,第一次出现一定不会循环,因为默认值肯定是false。所以肯定会往下执行,然后我们给这个索引值赋值为true;这样做的目的是如果下次随机产生又是这个数,我们可以让他继续循环,直到不再重复,最后把这个值当作一个数放到集合当中。作为一个没有基础的人,我觉得这个逻辑很有意思,所以发出来给同养基础的人看看交流交流,下面附上数组的
public static void main(String[] args) {
// 生成 [0-n) 个不重复的随机数
// list 用来保存这些随机数
int[] arr = new int[10];
int n = 10;
Random rand = new Random();
boolean[] bool = new boolean[n];
int num = 0;
int index = 0;
for (int i = 0; i < n; i++) {
do {
// 如果产生的数相同继续循环
num = rand.nextInt(n);
} while (bool[num]);
bool[num] = true;
arr[index] = num;
index++;
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr + " ");
}
}
|
|