类似于我们生活中比如某些编码或者校验码必须唯一的情况,不能有重复的数据,这时候我们就得生成不重复的数组思路较为简单,就是把生成的元素和数组中已有的元素做比较,遇到重复的重新生成,遇到不重复的放进去.
public static void main(String[] args) {
//-- 要求: 只放1-10 , 不可以重复!
int[] array = new int[10];
//-- 遍历
A:for (int i = 0; i < array.length; i++) {
/*
* 比较:
* i = 0 ,需要比较0次
* i = 1 ,需要比较1次 保证 array[0] != array[1]
* i = 2 ,需要比较2次 保证 array[0] != array[2] 且 array[1] != array[2]
* i = 3 ,需要比较3次 保证 array[0] != array[3] 且 array[1] != array[3] 且 array[2] != array[3]
*
*
* 比较是一个重复的过程,重复的过程选择循环.考虑 知道循环次数吗?
* 知道!!就用for循环,不知道用while循环 < i i代表当前生成的元素,那i和 之前的所有做比较!!
*
* 规律:
* 用0~i-1 位置上的元素和i位置上的元素做比较,
*
* 结果:
* 只要有1个重复,就重新生成, 都不重复 继续生成下一个!
*
*
*
*/
array[i] = (int)(Math.random() * 10) + 1;
//-- 写array.length 不算错,但是多做了无意义的比较!!
B:for (int j = 0; j < i ; j++) {
//-- 遇到一样的,要重新生成元素
if (array[i] == array[j]) {
//-- 离开了B,对于A来说,循环体执行结束,要执行i++操作.一旦i++,就进入生成下一个元素的环节
//-- 当前是重复的,不可以进入下一个元素,必须停留在当前!
//-- i++是拦不住的,所以提前 执行i--, 当执行完i++后,相当于i的值没有改变
//-- 当前i=5, i-->i=4,i++=>i=5
//-- 当前i=5, i++=>i=6
i--;
break; //-- 离开了B
}
}
}
System.out.println(Arrays.toString(array));
}
}