Java生成1到100无序数字,上代码:
算法一:
public class Test {
static Random random = new Random();
// 原始数组
private static int[] origin = new int[100];
private static int ret = 0;
public static void main(String[] args) {
// 初始化数组
for(int i = 0; i <= origin.length - 1; ++i) {
origin[i] = 0;
}
// 设值,0-100,乱序
for(int i = 0; i < 100; ++i) {
setVal(origin,random.nextInt(99));
}
// 查看原始数组
show(origin);
System.out.println("---------------------------------------");
// 查看排序后的数组
order(origin);
}
// 将正确的值设进初始化数组中
public static int setVal(int[] a, int x) {
int n = check(a,x);
for(int i = 0; i <= a.length - 1; ++i) {
// 如果a[i]==0.则表示a[i]未设置
if(a[i] == 0) {
a[i] = n;
break;
}
}
return n;
}
// 检查,若生成的数字已存在,则重新生成,直到不存在为止
public static int check(int[] ori, int n) {
ret = n;
// 遍历整个数组
for(int i = 0; i <= ori.length - 1; ++i) {
if(ret == ori[i]) {
// 如果ret大于100,则已超出范围,设置为0
if(ret >= 100) {
ret = 0;
}
// 迭代
check(ori,++ret);
}
}
// 返回不重复的数字
return ret;
}
// 显示原始数组
public static void show(int[] a) {
for(int i = 0; i < a.length; ++i) {
System.out.println("a[" + i + " ] =" + a[i]);
}
}
// 排序
public static void order(int[] a) {
for(int i = 0; i <= a.length - 1; ++i) {
for(int j = 0; j < i; ++j) {
if(a[i] == 0) {
continue;
} else if(a[i] < a[j]) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
// 输出整个数组
for(int i = 0; i <= a.length - 1; ++i) {
System.out.println("a[" + i + "] = " + a[i]);
}
}
}
算法二:
public class Test02 {
private static Hashtable<Integer, Integer> ht = new Hashtable<Integer, Integer>();
private static Random random = new Random();
private static int NUM = 100;
private static int[] contain = new int[100];
public static void main(String[] args) {
generate(ht);
setVal(ht, contain);
System.out.println("--------------------原始顺序输出--------------------");
origin(contain);
System.out.println("\n--------------------递增顺序输出--------------------");
increase(contain);
}
// 生成1-100无序数字
public static void generate(Hashtable<Integer, Integer> h) {
// 若Hashtble键值小于100,则循环
for(int i = 0; h.size() < NUM; ++i) {
int n = random.nextInt(101);
// 若n不再Hashtable中且不为0,则加入
if(!(h.containsValue(n)) && n != 0) {
h.put(i, n);
}
}
}
// 设置无序数字到容量为100的数组中
public static void setVal(Hashtable<Integer, Integer> h, int[] a) {
int count = 0;
int i = 0;
// 循环设值
while(count < NUM) {
// 若h.get(i)!=null,则设值,否则检查下一个
if(h.get(i) != null) {
a[count++] = h.get(i++);
} else {
i++;
}
}
}
// 原始顺序输出
public static void origin(int[] a) {
for(int i = 0; i < a.length; ++i) {
System.out.print(a[i] + " ");
}
}
// 递增顺序输出
public static void increase(int[] a) {
// 冒泡
for(int i = 0; i < a.length; ++i) {
for(int j = 0; j < i; ++j) {
if(a[i] < a[j]) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
// 输出
for(int i = 0; i < a.length; ++i) {
System.out.print(a[i] + " ");
}
}
}
若有更优算法,欢迎探讨。