1 问题:
以时间做随机种子,让6个随机数在1-32之间,并且6个数字不会出现重复,而且不为0,连续生成5组这样的数
2 解决的思路
充分利用Set不允许重复的特性
如果数字先后顺序不重要,可以用HashSet
如果需要数字排序,可以用TreeSet
如果数字顺序很重要,可以用 LinkedHashSet
3 代码
package test;
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
import java.util.TreeSet;
public class TestRandom {
static Random ran;;
public static Set<Integer> getRandom() {
Set<Integer> set = new TreeSet<Integer>();
while (set.size() < 6) {
set.add(ran.nextInt(31) + 1);
}
return set;
}
public static void main(String[] args) {
Set<Set<Integer>> sets = new HashSet<Set<Integer>>();
ran = new Random(System.currentTimeMillis());
NEXT: while (sets.size() < 5) {
Set<Integer> set = getRandom();
for (Set<Integer> ss : sets) {
if (ss.containsAll(set)) { // 如果重复,则不记录
continue NEXT;
}
}
sets.add(set);
for (Integer id : set) {
System.out.print(id + ",");
}
System.out.println();
}
}
}4 运行结果4,5,13,19,21,24,
6,7,12,15,16,29,
5,6,10,15,19,31,
2,4,11,12,17,27,
1,11,13,15,30,31,