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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王虎 中级黑马   /  2012-10-7 10:36  /  2998 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

注释写的尽量清楚些,谢谢!

9 个回复

倒序浏览
随机排序?从来没玩过啊,什么叫随机排序?
回复 使用道具 举报
本帖最后由 黑马连家华 于 2012-10-7 11:16 编辑

我不写代码,只要说说原理你同样能理解
1,使用Random随机取得两个不超过数组长度的两个数作为数组角标
2,交换这两个角标的对应的元素
3,让这两步循环几次

但是这样有可能得到两个一样的数,这样再交换可能没意义
有人说在真实开发中,是交换临近的两个数,这样只需要得到一个随机数
但我试过,这样的乱序效果并不明显

有点时间,我上代码吧
  1. import java.util.Random;
  2. class Test
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 int[] arr = {1,2,3,4,5,6,7,8};
  7.                 Random r = new Random();
  8.                
  9.                 //让数组元素交换操作执行50次
  10.                 for(int x = 0;x<50;x++)
  11.                 {
  12.                         //获得两个小于数组角标长度的整数
  13.                         int indexa = r.nextInt(arr.length);
  14.                         int indexb = r.nextInt(arr.length);
  15.                        
  16.                         //交换这两个数组中的元素
  17.                         int temp = arr[indexa];
  18.                         arr[indexa] = arr[indexb];
  19.                         arr[indexb] = temp;
  20.                 }
  21.                
  22.                 //按格式打印数组
  23.                 System.out.print("数组乱序结果 [");
  24.                 for(int x = 0;x < arr.length;x++)
  25.                 {
  26.                         System.out.print(arr[x]+ ",");
  27.                 }
  28.                 System.out.println("\b]");
  29.                
  30.                 //如果把上面这两步操作封装成方法,使用时会更加灵活
  31.         }
复制代码

评分

参与人数 2技术分 +1 黑马币 +2 收起 理由
王虎 + 2 很给力!
王德升 + 1 赞一个!

查看全部评分

回复 使用道具 举报
黑马连家华 发表于 2012-10-7 10:52
我不写代码,只要说说原理你同样能理解
1,使用Random随机取得两个不超过数组长度的两个数作为数组角标
2,交 ...

既然是不超过数组长度的两个数作为数组角标,r.nextInt(arr.length-1)是否更合适些?
回复 使用道具 举报
王虎 发表于 2012-10-7 11:57
既然是不超过数组长度的两个数作为数组角标,r.nextInt(arr.length-1)是否更合适些? ...

nextInt是取不大于这个数的整数...
回复 使用道具 举报
黑马连家华 发表于 2012-10-7 12:56
nextInt是取不大于这个数的整数...

哦了,thank u!
回复 使用道具 举报
楼上的两个  不都一个班的么:L
回复 使用道具 举报
黑马连家华 发表于 2012-10-7 10:52
我不写代码,只要说说原理你同样能理解
1,使用Random随机取得两个不超过数组长度的两个数作为数组角标
2,交 ...

这是随机交换两个元素的值吧,这样无法确保正确的排序吧,LZ好像是要排序的效果吧.
回复 使用道具 举报
本帖最后由 黑马连家华 于 2012-10-7 13:59 编辑

我只知道跟你王燚是一个班的吧..
楼主的随机排序我觉得是乱序操作

原来楼主是王虎
回复 使用道具 举报
王斌 中级黑马 2012-11-21 17:04:31
10#
以1到10 ,5个数字为一组编一程序,输出所有不重复且数组当中包含{2,3 }   { 1,4 ,5}且不包含{6,7}{7,8,9} 这几组数的数组。。。
3个判断条件;1 不重复的数组(位置不论)
                        2 当中必须有{2,3}或{1,4,5}的数组。。
                       3 当中必须没有{6,7}或{7,8,9}的数组。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马