java中怎样让随机数不重复
2015-12-05 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
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;i<a.length;i++){
if(r == a[i]){
flag = false;
break;
}
}
if(flag){
a[count] = r;
System.out.println(r);
count++;
}
}
}
}
其中的变量flag用来标志产生的随机数是否已经存在,默认值设置为true,表示不存在,flase表示该随机数已经存在。
展开全部
最简单的办法就是将产生的随机数放入一个set中,然后判断set的size就好。set中是不能存在重复数的。
追问
能把代码,让我看看 吗?
追答
以下代码是产生10个不重复int型随机数,并用两种方式遍历
HashSet set=new HashSet();
while(true)
{
set.add(new Random().nextInt());
if(set.size()==10)
{
break;
}
}
Iterator iterator=set.iterator();
while(iterator.hasNext())
{
System.out.println(iterator.next());
}
Integer[] res=(Integer[])set.toArray();
for(int i=0;i<res.length;i++)
{
System.out.println(res[i]);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一个不错的算法,很简单,但有效。不过如果范围比较大,则占用内存大,就不推荐使用了。个人感觉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));}}
一个运行结果
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);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
3, 4, 5, 6, 7, 8, 9];
void swap(int* a, int* b) { // 交换两个元素
int c = *a;
*a = *b;
*b = c;
}
void rand_n(int len, n) { // 打乱table中各个元素之间的顺序
for (int i = 0; i < len; i++) {
swap(&table[i], &table[rand() / len]);
}
for (int i = 0; i < n; i++) { // 输出前n个元素
printf("%d\n", table[i]);
}
}
int main() {
rand_n(sizeof(table)/sizeof(int), 4);
}
void swap(int* a, int* b) { // 交换两个元素
int c = *a;
*a = *b;
*b = c;
}
void rand_n(int len, n) { // 打乱table中各个元素之间的顺序
for (int i = 0; i < len; i++) {
swap(&table[i], &table[rand() / len]);
}
for (int i = 0; i < n; i++) { // 输出前n个元素
printf("%d\n", table[i]);
}
}
int main() {
rand_n(sizeof(table)/sizeof(int), 4);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询