当前位置:编程学习 > JAVA >>

生成随机不重复数组,菜鸟问题。。。。


private int[] makeNoRepeat(int length){
int [] sss=new int[length];
// System.out.println("length:"+length);
Random rd=new Random();
int i=0;
int temp;
boolean flag=true;

do{
System.out.println("i:"+i);
temp=rd.nextInt(10);
System.out.println("temp:"+temp);
for(int j=0;j<i;j++){
System.out.println("sss["+j+"]:"+sss[j]);

System.out.println(temp==sss[j]);

if(temp==sss[j]){
flag=false;
break;
}
}
if(flag){
sss[i]=temp;
i++;
}
}while(i<length);

return null;
}


执行后就死循环了  大大们帮忙看下把 --------------------编程问答-------------------- private static int[] makeNoRepeat(int length){
        int [] sss=new int[length];
    //    System.out.println("length:"+length);
        Random rd=new Random();
        int i=0;
        int temp;
        boolean flag=true;
        
        do{
            System.out.println("i:"+i);
            temp=rd.nextInt(10);
            System.out.println("temp:"+temp);
            for(int j=0;j<i;j++){
                System.out.println("sss["+j+"]:"+sss[j]);
                
                System.out.println(temp==sss[j]);
                
                if(temp==sss[j]){
                    flag=false;
                    break;
                }
            }
            if(flag){
                sss[i]=temp;
                i++;
            }
            flag=true;
        }while(i<length);
        
        return null;
    } --------------------编程问答-------------------- if(flag){
   sss[i]=temp;
   i++;
   }
   flag=true;
 在这个if后面加上一个flag=true; --------------------编程问答-------------------- 3q 小弟白痴了。。。 --------------------编程问答-------------------- 不重复的数组生成,没必要这么去判断重复,既然不重复,肯定是不相等,不相等,就可以按从小到大生先成数据,然后再打乱顺序就可以了
for example

int[] a = new int[10];
a[i] = (int)(Math.random()*100); //生成第一个数据
for (int i=1; i<a.length; i++) {
    a[i] = a[i-1] + (int)(Math.random()*10) + 1; //从小到大随机生成数据
}
for (int i=0; i<a.length; i++) { //打乱顺序
    int idx = (int)(Math.random()*a.length); //随机生成一个位置
    int t = a[idx];
    a[idx] = a[a.length-idx-1]; //交换随机位置和长度-随机位置的两个元素
    a[a.length-idx-1] = t;
}
--------------------编程问答--------------------
引用 4 楼  的回复:
不重复的数组生成,没必要这么去判断重复,既然不重复,肯定是不相等,不相等,就可以按从小到大生先成数据,然后再打乱顺序就可以了
for example

Java code
int[] a = new int[10];
a[i] = (int)(Math.random()*100); //生成第一个数据
for (int i=1; i<a.length; i++) {
    a[i] =……

+1 --------------------编程问答-------------------- --------------------编程问答-------------------- 这没有什么难度把。

生成随即数组,可以借助HashSet,先将生成的数添加进hashset,再把hashset转换为数组即可。 --------------------编程问答-------------------- 楼主如果你传递的length参数大于10的话,你的程序还回事死循环啊 --------------------编程问答-------------------- temp=rd.nextInt(10);
最好是用length来确定你随机数的范围吧
temp=rd.nextInt(10 * length + 1)之类的
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,