java数组随机乱序且乱序后不在其原来的位置上(代码片段)
来源:互联网 发布:海淘网站farfetch 知乎 编辑:程序博客网 时间:2024/06/06 09:49
背景:因业务需要,需要对一个数组进行乱序,如:A、B、C、D相互交换顺序,交换顺序后要求每个人都不能拿到自己的编号,交换后:DCBA、DABC等符合要求,而ADCB、DBCA这类则不符合要求,背景说明完毕,上代码:
package com.sdzn.util;import java.util.ArrayList;import java.util.List;public class RandomUtil { /** * main方法描述: 随机数工具 * * @author : Ricky * @createTime : Jun 19, 2015 1:16:54 PM * @param args */ public static void main(String[] args) { for (int k = 0; k < 10000; k++) { int[] sort = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int[] newss = new RandomUtil().randomSort(sort); for (int p = 0; p < sort.length; p++) { if (sort[p] == newss[p]) { System.out.println("相等了"); } } if (k % 100 == 0) { System.out.println(k); for (int p = 0; p < sort.length; p++) { System.out.print(newss[p] + " "); } } } } /** * randomSort方法描述: 将一个数组进行随机排序,使每个序列位置上的数字都不是原来的数字 * 使用场景:****。 * * @author : Ricky * @createTime : Jun 19, 2015 3:38:55 PM * @param sort * 需要打乱顺序的数组 * @return */ public int[] randomSort(int[] sort) { List<Integer> sList = new ArrayList<Integer>(); List<Integer> rList = new ArrayList<Integer>(); int[] rSort = new int[sort.length]; for (int s : sort) { sList.add(s); } int count = 0; Integer lastValue = null; while (sList.size() > 0) { int randSeq = getRandom(sList.size()); if (sList.get(randSeq) != sort[count]) { rList.add(sList.get(randSeq)); sList.remove(randSeq); count++; } else { if (count + 1 == sort.length) { if (sList.get(randSeq) == sort[count]) { lastValue = sort[count]; rList.add(sList.get(randSeq)); sList.remove(randSeq); } break; } } } for (int i = 0; i < rList.size(); i++) { rSort[i] = rList.get(i); } if (lastValue != null) { int t = rSort[sort.length - 1]; int randomSeq = getRandom(sort.length - 1); rSort[sort.length - 1] = rSort[randomSeq]; rSort[randomSeq] = t; } return rSort; } /** * getRandom方法描述: 获得小于quan的一个整数 * * @author : Ricky * @createTime : Jun 19, 2015 1:44:19 PM * @param quan * 产生的整形数字必须比它小 * @return */ private int getRandom(int quan) { int newInt = quan; while (!(newInt < quan)) { String randomStr = "" + quan * Math.random(); if (randomStr.contains(".")) randomStr = randomStr.substring(0, randomStr.indexOf(".")); newInt = Integer.parseInt(randomStr); } return newInt; }}
0 0
- java数组随机乱序且乱序后不在其原来的位置上(代码片段)
- 随机抽奖代码片段--Java
- 用随机乱序建造理想的密钥数组
- 指定数组的随机乱排输出
- java数组乱序
- 将一个数组中所有的奇数放左边,偶数放右边,且原来数字的相对位置不变
- 十本不同的书放在书架上。现重新摆放,使每本书都不在原来放的位置。有几种摆法?
- 有5个人ABCDE排队,排好后他们决定重新排队,每个人都不在原来的位置上,那么总共有多少种排法
- Javascript数组完全随机排列(数组乱序)
- [Java代码] 分享代码片段:将指定位置的war包加入classpath的classloader实现
- Xcode代码片段位置
- 【Java】随机生成范围[min,max]之间的整数数组,且元素值不重复
- Delphi洗牌算法 - 将一个数组随机乱序
- 有用的Java代码片段
- JAVA图像的代码片段
- 实用的java代码片段
- 实用的java代码片段
- 编写一个javscript函数 fn,该函数有一个参数 n(数字类型),其返回值是一个数组,该数组内是 n 个随机且不重复的整数,且整数取值范围是 [2, 32]。
- 黑马程序员——C语言基础知识整理——关键字、标示符与注释
- 通过修改manifest文件来解决Vista/Win7/Win8下应用程序兼容性问题
- 技术演绎之 [ java ] java 运算符
- android开发中常见错误汇总
- 学习opencv第二章所用函数总结
- java数组随机乱序且乱序后不在其原来的位置上(代码片段)
- Oracle 10g/11g 导入导出整理
- termios结构体相关的函数
- Hadoop权威指南第八章
- POJ 1083 Moving Tables
- 三目运算及数据类型转换经典案例
- 转载_蓝牙物理链路类型:SCO和ACL链路
- 好久不学英语,差点忘了,赶紧整理!日期相关
- PATBasic——1008. 数组元素循环右移问题 (20)