大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
import java.util.Arrays;
创新互联公司凭借专业的设计团队扎实的技术支持、优质高效的服务意识和丰厚的资源优势,提供专业的网站策划、网站设计、成都网站制作、网站优化、软件开发、网站改版等服务,在成都十多年的网站建设设计经验,为成都上千中小型企业策划设计了网站。
public class Demo {
public static void main(String[] args) {
int number;
int[] array = new int[] { 6, 3, 12, 7, 2, 5, 20, 45, 31, 87, 11, 66, 59, 71, 21 };
int[] arr = new int[] { 0, 0, 0, 0, 0, 0 };
// 随机从数组array中抽取6个数字
int k = 0;
do {
number = (int) (Math.random() * 15);//随机的是数组的下标0~14
boolean b = true ;
for (int i = 0; i arr.length; i++) {
if (arr[i] == array[number]) {//然后比较的时候,是用下标去找数,而不是用下标进行比较
//arr[i] = number是错的!
b=false;//如果找到有一样的数,那么判断这次随机无效,false
}
// else{ 这个else在for循环内部,for循环6次,k就循环了6次.那么这个循环do while(k6)就没办法循环了
// arr[k] = number;
// k++;
// }
}
if(b){//如果这次随机有效,那么才给arr[k]进行赋值
arr[k] = array[number];//同理,赋值 也不是 arr[k]=number .number只是随机的array的下标
k++;
}
} while (k 6);
System.out.println(Arrays.toString(arr));
}
}
输出
[59, 66, 71, 87, 20, 31]
一个不错的算法,很简单,但有效。不过如果范围比较大,则占用内存大,就不推荐使用了。个人感觉1000个以内的就可以考虑。这东西也许你早就知道了,但我依然惊叹算法的力量。看代码 import java.util.*;/** * 生成不重复随机数的一种算法。***/ public class T { public static void main(String args) { // 种子你可以随意生成,但不能重复 int seed = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; int ranArr = new int; Random ran = new Random(); // 数量你可以自己定义。 for (int i = 0; i seed.length; i++) { // 得到一个位置 int j = ran.nextInt(seed.length - i); // 得到那个位置的数值 ranArr[i] = seed[j]; // 将最后一个未用的数字放到这里 seed[j] = seed[seed.length - 1 - i];} System.out.println("ranArr:" + Arrays.toString(ranArr));}} 一个运行结果
public int getRandomNumber(){
Integer randomNumber = (int) (Math.random()*100);//产生0-100随机数
ListInteger list = new ArrayListInteger();
if (!list.contains(randomNumber)) {//判断是否重复,不是重复的加入集合
list.add(randomNumber);
}else {//如果产生的随机数是重复的,用递归的方法再次生成
getRandomNumber();
}
return randomNumber;
}
我想的思路如上面代码所示。
java中要使生成的随机数不重复可以将已经生成的随机数放入到数组中,每次生成随机数时与数组的内容比较是否相等,相等则重新生成,不相等则存入数组。
示例代码如下(生成10之内的4个不相等的整数):
public class Demo {
public static void main(String[] args) {
int[] a = new int[]{-1,-1,-1,-1};//初始化数组
Random random = new Random();
int count = 0;//记录有效的随机数个数
while(count a.length){
boolean flag = true;//用来标志的变量
int r = random.nextInt(10);
for(int i=0;ia.length;i++){
if(r == a[i]){
flag = false;
break;
}
}
if(flag){
a[count] = r;
System.out.println(r);
count++;
}
}
}
}
其中的变量flag用来标志产生的随机数是否已经存在,默认值设置为true,表示不存在,flase表示该随机数已经存在。
废话不多说直接上代码!\x0d\x0aimport java.util.ArrayList;\x0d\x0aimport java.util.Random;\x0d\x0apublic class Test {\x0d\x0a public static void main(String[] args) {\x0d\x0a // 生成 [0-n) 个不重复的随机数\x0d\x0a // list 用来保存这些随机数\x0d\x0a ArrayList list = new ArrayList();\x0d\x0a int n = 10;\x0d\x0a Random rand = new Random();\x0d\x0a boolean[] bool = new boolean[n];\x0d\x0a int num = 0;\x0d\x0a for (int i = 0; i
回答于 2022-12-14
首先,需要一个范围内的随机数,第二部判重,如果重复了就再次随机.
假设我们需要一个m到n的随机数..
需要用到random函数随机一个从0到1的数.然后再乘m到n的范围,再加m
double i = Math.random() * (m - n) + m ---- 生成随机数
判重..方法有很多种了..比如我们用一个Set来存放已经存在的..
SetDouble set = new LinkedHashSet();
if (set.contains(i)) { 重复了,重新随机 }
else { 向set中添加: set.add(Double.valueOf(i)); }
2017年8月28日 21:37:44