A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

胡家福

黑马帝

  • 黑马币:0

  • 帖子:16

  • 精华:0

本帖最后由 胡家福 于 2012-1-6 10:16 编辑

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

这个我的想法是先用Random产生随机数,再将重复的数字换成没有出现的数字,感觉这个方法不好,大家提点更好的,问题不复杂,最好能上代码,好看结果
大家多关照啊,我也在网上找过了,没有特别合适的,求教了!

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

8 个回复

倒序浏览
本帖最后由 罗利民 于 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);
      
  }

}

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
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;
        }
}

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
随机抽取0-9任一个元素K,利用a[k]来进行建立树,k-1为k的左子树,k+1为k的右子树。
建好后利用1-3随机数抽取三种遍历的方法,前序中序后序。
然后遍历输出。
用c实现会比较好。
回复 使用道具 举报
k-1不妥,应该用随机数 k-i%M(数组长度),或者k+i%m

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
李建平 发表于 2012-1-5 16:02
import java.util.Random;

for(int a:n)
这个地方为什么不是for(int a:n2)
我试了下,两种情况都可以,为什么?
回复 使用道具 举报
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;
        }
}

评分

参与人数 1技术分 +2 收起 理由
吴上储 + 2

查看全部评分

回复 使用道具 举报
李建平 发表于 2012-1-6 09:44
JAVA传参传的是地址,实际n,n2,no,sequence指向的都是同一个数组所以一样的,int [] n2= getSequence(n);这 ...

感谢!!
回复 使用道具 举报
小白 黑马帝 2012-1-6 17:47:51
9#
可以尝试有map做做
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马