package myPackage;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class RandomNumber {
/**
* 定义获取随机数
*
* @param num
*/
public static int getRandom(int value) {
int num;
Random r = new Random();
num = r.nextInt(value);
return num;
}
/**
* 打印数组,排序前与排序后
*
* @param num
*/
public static void getSort(int[] num) {
System.out.println("原数组:");
for (int i = 0; i < num.length; i++) {
if (i != 0 && i % 10 == 0)
System.out.println();
System.out.print(num[i] + " ");
}
System.out.println("\n排序后:");
Arrays.sort(num);
for (int i = 0; i < num.length; i++) {
if (i != 0 && i % 10 == 0)
System.out.println();
System.out.print(num[i] + " ");
}
}
/**
* 防止产生随机数方法一
*
* @param num
*/
public static void getNum(int[] num, int value) {
int temp;
for (int i = 0; i < num.length; i++) {
temp = getRandom(value);
for (int j = 0; j < i; j++) {
if (num[j] == temp) {
temp = getRandom(value);
j = -1;
}
}
num[i] = temp; // 直到确认无重复时,将值赋给数组元素
}
}
/**
* 防止产生随机数方法二
*
* @param size
* @return
*/
public static int[] getNum(int size, int maxValue) {
int[] v = new int[size];
if (size > maxValue || size <= 0) {
v = null;
}
for (int i = 0; i < v.length; i++) {
v[i] = getRandom(maxValue);
for (int j = 0; j < i; j++) {
if (v[j] == v[i]) {
i--; // 当遇到重复数时,返回其元素获取元素的随机方法
break;
}
}
}
return v;
}
/**
* 防止产生随机数方法三
*
* @param value
* @param num
*/
public static void getNum(int value, int[] num) {
for (int i = 0; i < num.length; i++) {
num[i] = (value * i / num.length) + (int) (Math.random() * value / num.length);
}
}
/**
* 防止产生随机数方法四
*
* @param size
* @param value
* @return
*/
public static void getNum1(int[] num, int size, int value) {
boolean[] v = new boolean[value];
int temp = 0;
for (int i = 0; i < num.length; i++) {
do {
temp = getRandom(value);
} while (v[temp]);
v[temp] = true;
num[i] = temp;
}
}
/**
* 主方法
*
* @param args
*/
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入数组的长度:");
int size = input.nextInt();
System.out.print("表输入产生随机数范围:");
int maxValue = input.nextInt();
// 方法一
System.out.println("方法一");
int[] num = new int[size];
getNum(num, maxValue);
getSort(num);
System.out.println("\n-------------------------------------------------------------------------");
// 方法二
System.out.println("方法二");
int[] num1 = getNum(size, maxValue);
if (num1 != null) {
getSort(num1);
}
System.out.println("\n-------------------------------------------------------------------------");
// 方法三
System.out.println("方法三");
int[] num2 = new int[size];
getNum(maxValue, num2);// 其方法已是有序随机方法数组
getSort(num2);
System.out.println("\n-------------------------------------------------------------------------");
// 方法四
System.out.println("方法四");
int[] num3 = new int[size];
getNum1(num3, size, maxValue);
getSort(num3);
}
}