今天分享一下学习数组的一些小心得,在生成随机数组里,可能也有人会和我遇到同样的情况,就是写到判断数组中有两个数相等,但不知道后续怎么操作。
我使用的方法是,在出现这个情况后,给第一个数重新赋值,然后把把i值赋为0,这样数组就会从头再次比较数组是否有相同的数产生。
这个方法虽然可以解决上述问题,但是由于算法太简陋,性能较差,在生成数量级较大的随机数组时不太适合。
package com.demo;
//数组去重
public class test {
public static void main(String[] args) {
// 生成一个数组
int[] is = new int[] { 5, 20, 5, 10, 10 };
// 生成去重后的数组
int[] is11 = new int[is.length];
int count = 0;
// 数组变量与数组逐一比较
for (int i = 0; i < is.length; i++) {
for (int j = 0; j < is.length; j++) {
// 不和自己比
if (i != j) {
// 当遇到重复的数就跳出循环,不赋值
if (is[i] == is[j])
break;
// 不重复就把值付给数组 is11
} else {
is11[count] = is[i];
count++;
}
}
}
// 输出去重后的数组
for (int ii : is11) {
System.out.println(ii);
}
}
}
package com.demo;
import java.util.Random;
public class Demo04 {
public static void main(String[] args) {
// 1 ~ 10
int[] sum = getNumMM(20, 30);
for (int i : sum) {
System.out.println(i);
}
}
/**
* 生成num个 num2以内的 数
*
* @param num
* 个数
* @param num2
*/
public static int[] getNumMM(int num, int num2) {
Random random = new Random();
int[] sum = new int[num];
for (int i = 0; i < num; i++) {
sum[i] = random.nextInt(num2) + 1;
}
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
// 不和自己比
if (i != j) {
/*当遇到数组中有重复的变量,就新建一个,然后给i赋值0,让数组从头再比较数组
在这里 i=0 可以优化,改善程序性能*/
if (sum[i] == sum[j]) {
sum[i] = random.nextInt(num2) + 1;
i = 0;
}
} else {
}
}
}
return sum;
}
}