如何让JAVA生成不重复随机数
展开全部
一个不错的算法,很简单,但有效。不过如果范围比较大,则占用内存大,就不推荐使用了。个人感觉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));}}
一个运行结果
展开全部
/**
* @随机数组
* 生成一个由大于零的随机整数组成的数组,且数组中没有重复的值。
*
* @author
* @email
*/
import java.util.Arrays;
public class RandomArray {
/*
* 测试代码
*/
public static void main(String[] args) {
RandomArray ra = new RandomArray();
System.out.println(Arrays.toString(ra.getRandomArray(10)));
}
/**
* 将新获得的随机数与已产生的其它随机数相比较,若有重复数据,则丢弃,并重来一遍;
* 否则,将新数存入数组。
*
* @param i 数组的大小
* @return 随机数组
*/
public int[] getRandomArray(int i) {
int[] a = new int[i]; // a 随机数数组
for (int m = 0; m < i; m++) { // m 已产生的随机数个数
int temp = random();
if (m == 0)
a[0] = temp;
else {
for (int n = 0; n < m; n++) { // n 遍历已产生的随机数
if (temp == a[n]) {
temp = random();
n = -1;
}
}
a[m] = temp;
}
}
return a;
}
/**
* 随机数发生器
* 0 <= Math.random() < 1
*
* @return 1至10之间的随机整数
*/
private int random() {
return (int) (10 * Math.random() + 1);
}
}
* @随机数组
* 生成一个由大于零的随机整数组成的数组,且数组中没有重复的值。
*
* @author
*/
import java.util.Arrays;
public class RandomArray {
/*
* 测试代码
*/
public static void main(String[] args) {
RandomArray ra = new RandomArray();
System.out.println(Arrays.toString(ra.getRandomArray(10)));
}
/**
* 将新获得的随机数与已产生的其它随机数相比较,若有重复数据,则丢弃,并重来一遍;
* 否则,将新数存入数组。
*
* @param i 数组的大小
* @return 随机数组
*/
public int[] getRandomArray(int i) {
int[] a = new int[i]; // a 随机数数组
for (int m = 0; m < i; m++) { // m 已产生的随机数个数
int temp = random();
if (m == 0)
a[0] = temp;
else {
for (int n = 0; n < m; n++) { // n 遍历已产生的随机数
if (temp == a[n]) {
temp = random();
n = -1;
}
}
a[m] = temp;
}
}
return a;
}
/**
* 随机数发生器
* 0 <= Math.random() < 1
*
* @return 1至10之间的随机整数
*/
private int random() {
return (int) (10 * Math.random() + 1);
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |