黑马程序员技术交流社区

标题: 问个乱序排列的问题(第一次求助,多多关照啊~~) [打印本页]

作者: 胡家福    时间: 2012-1-5 15:43
标题: 问个乱序排列的问题(第一次求助,多多关照啊~~)
本帖最后由 胡家福 于 2012-1-6 10:16 编辑

之前有看毕老师视频介绍Random用法,就是产生随机数,现在我的需求是
我要乱序排列[0,1,2,3,4,5,6,7,8,9]这10个数,注意不是产生0-9的随机数,随机数会出现两个或多个数字重复的情况,
现在要求数字不重复,只是顺序打乱,并且每次运行的结果都不相同。

这个我的想法是先用Random产生随机数,再将重复的数字换成没有出现的数字,感觉这个方法不好,大家提点更好的,问题不复杂,最好能上代码,好看结果
大家多关照啊,我也在网上找过了,没有特别合适的,求教了!
作者: 罗利民    时间: 2012-1-5 15:47
本帖最后由 罗利民 于 2012-1-5 16:20 编辑

先将你说的数add到LinkedList中,
在用Collections类的shuffle方法可以实现随机排序
import java.util.*;

public class Rand{

  public static void main(String[] args){
         
      Collection a = new LinkedList();
      
      for(int i=1 ;i<=10;i++){
         a.add(i);
      }
      Collections.shuffle((LinkedList)a);
      System.out.println(a);
      
  }

}

作者: 李建平    时间: 2012-1-5 16:02
import java.util.Random;


public class Lx {
        public static void main(String[] args) {
                int[] n ={0,1,2,3,4,5,6,7,8,9};
                int [] n2= getSequence(n);
                for(int a:n){
                        System.out.print(a);
                }

        }
               
         public static int[] getSequence(int[] no) {
                 int[] sequence = no;
                 Random random = new Random();
                 for(int i = 0; i < no.length; i++){
                         int p = random.nextInt(no.length);
                         int tmp = sequence[i];
                         sequence[i] = sequence[p];
                         sequence[p] = tmp;
                }
                random = null;
                return sequence;
        }
}
作者: 彭嘉聪    时间: 2012-1-5 16:02
随机抽取0-9任一个元素K,利用a[k]来进行建立树,k-1为k的左子树,k+1为k的右子树。
建好后利用1-3随机数抽取三种遍历的方法,前序中序后序。
然后遍历输出。
用c实现会比较好。
作者: 彭嘉聪    时间: 2012-1-5 16:05
k-1不妥,应该用随机数 k-i%M(数组长度),或者k+i%m
作者: 胡家福    时间: 2012-1-5 16:26
李建平 发表于 2012-1-5 16:02
import java.util.Random;

for(int a:n)
这个地方为什么不是for(int a:n2)
我试了下,两种情况都可以,为什么?
作者: 李建平    时间: 2012-1-6 09:44
JAVA传参传的是地址,实际n,n2,no,sequence指向的都是同一个数组所以一样的,int [] n2= getSequence(n);这一名实际是多余的,
public static int[] getSequence(int[] no) 方法也可以是无返回值的:
import java.util.Random;


public class Lx {
        public static void main(String[] args) {
                int[] n ={0,1,2,3,4,5,6,7,8,9};
                //int [] n2= getSequence(n);
                getSequence(n);
                for(int a:n){
                        System.out.print(a);
                }

        }
               
         public static void getSequence(int[] no) {
                 int[] sequence = no;
                 Random random = new Random();
                 for(int i = 0; i < no.length; i++){
                         int p = random.nextInt(no.length);
                         int tmp = sequence[i];
                         sequence[i] = sequence[p];
                         sequence[p] = tmp;
                }
                random = null;
                //return sequence;
        }
}
作者: 胡家福    时间: 2012-1-6 10:17
李建平 发表于 2012-1-6 09:44
JAVA传参传的是地址,实际n,n2,no,sequence指向的都是同一个数组所以一样的,int [] n2= getSequence(n);这 ...

感谢!!
作者: 小白    时间: 2012-1-6 17:47
可以尝试有map做做





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2