最近在读《java编程思想》的时候看到了一段代码,目的是随机产生几个不同的字符,看到这个需求第一感觉就是在已产生的字符基础上去判断新的字符是否已经出现,如果出现,就生成新的字符........按照这个逻辑自己敲了之后,发现时间复杂度很高,看了书上面的源码,感觉很巧妙,很快就出现结果,特分享一下.........
public class RandomTest {
public static void main(String[] args) {
String CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
boolean[] bools = new boolean[CHARS.length()];
Random random = new Random();
StringBuilder sb = new StringBuilder();
int i = random.nextInt(CHARS.length());
//循环5次,即生成5个不同的字符
for(int j=0;j<5;j++){
//如果这个位置的bools的值为true,说明这个位置的字符已经出现过来,需要重新产生一个随机数
while(bools[i]){
i = random.nextInt(CHARS.length());
}
//生成了一个随机数之后就把对应位置的bools的值改为true
bools[i] = true;
sb.append(CHARS.charAt(i));
}
System.out.println(sb.toString());
}
}
上述代码直接拷贝运行即可.......