/* * 网上看到一道题,挺有意思。记录下来。 */ package array; public class RandomArray<T> { private T[] array; private Object[] result; private Integer count = 0; private T[] getArray() { return array; } private void setArray(T[] array) { this.array = array; Integer size = 1; for (Integer i = array.length; i >= 1; i --) { size *= i; } System.out.println("result size = " + size); this.result = new Object[size]; } private Object[] getResult() { return result; } private void putElementToResult(T[] array) { result[count] = array; } private RandomArray (T[] array) { this.setArray(array); } private void exchange (Integer originalIndex, Integer destinationIndex) { if (originalIndex.compareTo(destinationIndex) == 0) { return; } T[] array = this.getArray(); T temp = array[originalIndex]; array[originalIndex] = array[destinationIndex]; array[destinationIndex] = temp; } private Object[] copyArray(T[] array) { Object[] objs = new Object[array.length]; for (Integer i = 0; i < array.length; i++) { objs[i] = array[i]; } return objs; } private void arrayHandler (Integer startIndex, Integer endIndex) { if (startIndex.compareTo(endIndex) != 0) { for(Integer i = startIndex; i <= endIndex; i ++ ) { exchange(startIndex, i); arrayHandler(startIndex + 1, endIndex); exchange(i, startIndex); } } else { @SuppressWarnings("unchecked") T[] param = (T[]) copyArray(array); this.putElementToResult(param); this.count ++; } } private Integer getRandomNumber() { Integer countLength = count.toString().length(); while(true) { Long currentMillis = System.currentTimeMillis(); String compareVal = currentMillis.toString().substring(currentMillis.toString().length() - countLength); Integer number = getValidNumber(compareVal); if (number <= count) { return number; } } } private Integer getValidNumber(String compareVal) { if ("0".equals(compareVal)) { return 0; } else if(compareVal.startsWith("0")) { compareVal = compareVal.replaceFirst("0", ""); return getValidNumber(compareVal); } else { return Integer.valueOf(compareVal); } } @SuppressWarnings("unchecked") private T[] convertObjectArrayToGenericArray(Object[] data, T[] container) { for(Integer i = 0; i < data.length; i ++) { container[i] = (T) data[i]; } return container; } public T[] getRandomArray(T[] container) { arrayHandler(0,this.getArray().length - 1); Object[] _this = this.getResult(); Integer indexNumber = getRandomNumber(); Object[] objs = (Object[]) _this[indexNumber]; return convertObjectArrayToGenericArray(objs, container); } public static void main(String[] args) { /* *test */ String[] array = {"1","2","3"}; RandomArray<String> ran = new RandomArray<String>(array); String[] randomArray = ran.getRandomArray(new String[3]); for (String str: randomArray) { System.out.print(str + " "); } } }
相关推荐
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...
Java二进制IO类与文件复制操作实例,好像是一本书的例子,源代码有的是独立运行的,与同目录下的其它代码文件互不联系,这些代码面向初级、中级Java程序员。 Java访问权限控制源代码 1个目标文件 摘要:Java源码...
- 在Java中使用`Random`类或其他方式生成0到1000之间的随机整数。 - **知识点2:循环结构** - 使用循环结构来不断提示用户猜测数字,直到猜中为止。 - **知识点3:控制台输入输出** - 从控制台读取用户的猜测,...
像坐标控制、旋转矩阵、定时器、生成图像、数据初始化、矩阵乘法、坐标旋转、判断是否是顺时针方向排列、鼠标按下、放开时的动作等,都可在本源码中得以体现。 Java编写的显示器显示模式检测程序 2个目标文件 内容...
实例044 利用数组随机抽取幸运观众 54 实例045 用数组设置JTable表格的列名与列宽 55 3.2 数组操作 57 实例046 数组的下标界限 57 实例047 按钮控件数组实现计数器界面 58 实例048 复选框控件数组 59 实例049 用数组...
凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...
凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码) 15个目标文件 摘要:Java源码,初学实例,基于EJB的真实...