package org.xh.rand;
import java.util.Arrays;
import java.util.Random;
public class RandDemo {
/**
*
* make by dxh on 2013-1-23 下午02:16:44
* @param args
*/
public static void main(String[] args)throws Exception {
int[] arr = RandDemo.genNum(5, 30);
RandDemo.showArr(arr, true);
}
/**
* 生成不重复随机数
*
* @param num
* 随机数个数
* @param value
* 随机数范围
* @see 注意value不可小于num
* @return
* @throws TargetMinException
*/
public static int[] genNum(int num, int value) throws TargetMinException {
int[] arr = new int[num];// 保存最终生成结果
int index = 0;// 状态索引 default = 0
arr = new int[num];
if (value < num) {
throw new TargetMinException("随机数取值范围不可以小于生成随机数个数");
}
boolean result = true;
while (result) {// 控制是否继续生成随机数
Random rd = new Random();
int tempRandomNum = rd.nextInt(value) + 1;
if (arr[arr.length - 1] == 0) {// 决定是否继续生成随机数进行赋值
if (isHas(tempRandomNum, arr, index)) {// 判断已生成随机数是否与数组中已有数值重复
continue;
}
arr[index++] = tempRandomNum;// 将生成的不重复发的随机数放入数组中
} else
result = false;
}
return arr;
}
/**
* 判断是否已存在生成的随机数
*
* @param mm
* @param arr
* @param index
* @return
*/
private static boolean isHas(int tempRandomNum, int[] arr, int index) {
for (int i = 0; i < index; i++) {
if (tempRandomNum == arr[i]) {
return true;
}
}
return false;
}
/**
* showArr
*
* @param arr
* @param isSort
*/
@Deprecated
public static void showArr(int[] arr, boolean isSort) {
for (int j = 0; j < arr.length; j++) {
if (isSort) {
Arrays.sort(arr);
}
System.out.print(arr[j] + ",");
}
}
static class TargetMinException extends Exception {
private static final long serialVersionUID = 1L;
public String message = "";
public TargetMinException(String message) {
this.message = message;
}
@Override
public String getMessage() {
return this.message;
}
}
}