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表示该随机数已经存在。

百度网友ef10e91
2011-03-09 · TA获得超过1822个赞
知道大有可为答主
回答量:1223
采纳率:50%
帮助的人:1296万
展开全部
最简单的办法就是将产生的随机数放入一个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]);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
魅1006i828
2013-08-26 · 超过66用户采纳过TA的回答
知道答主
回答量:113
采纳率:66%
帮助的人:122万
展开全部
一个不错的算法,很简单,但有效。不过如果范围比较大,则占用内存大,就不推荐使用了。个人感觉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));}}
一个运行结果
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
尚帝之父
2015-10-21 · TA获得超过199个赞
知道小有建树答主
回答量:151
采纳率:46%
帮助的人:43.9万
展开全部
/**
* @随机数组
* 生成一个由大于零的随机整数组成的数组,且数组中没有重复的值。
*
* @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);
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户66627
2011-03-09 · TA获得超过130个赞
知道答主
回答量:225
采纳率:0%
帮助的人:0
展开全部
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);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式