我想创建一个包含4个字符的随机唯一字符串,这些字符位于此数组中
char[] color = {'a','b','c','d','e'};
不允许重复。
我尝试了什么
ArrayList<Character> color = new ArrayList<Character>();
char[] randCode = new char[4];
Random rand = new Random();
color.add('A');
color.add('B');
color.add('C');
color.add('D');
color.add('E');
char randChar1 = color.get(rand.nextInt(color.size()));
color.remove(randChar1);
randCode[0] = randChar1;
char randChar2 = color.get(rand.nextInt(color.size()));
color.remove(randChar2);
randCode[1] = randChar2;
char randChar3 = color.get(rand.nextInt(color.size()));
color.remove(randChar3);
randCode[2] = randChar3;
char randChar4 = color.get(rand.nextInt(color.size()));
color.remove(randChar4);
randCode[3] = randChar4;
String randomCode = String.valueOf(randCode);
return randomCode;
我的代码给了我一个java.lang.IndexOutOfBoundsException: Index: 68, Size: 5
答案 0 :(得分:0)
现在已经提供了适当的信息,这个问题需要一些关闭。
而不是char[] randCode
,StringBuilder randCode
应该用于逐步构建随机代码。这将消除一个混乱的根源。然后当StringBuilder完成时,使用.toString()方法返回其值。
其次,剩余的char原语可以更改为Character。这将消除我们处理字符的整数表示或字符本身的混淆。
通过这两个建议,代码可以正确返回随机代码并避免最初出现问题的IndexOutOfBoundsException。
答案 1 :(得分:0)
尝试使用HashSet<>
。 HashSet<>
是一个包含唯一值的类。 A little bit more information on HashSet。生成0到4之间的随机数,并将数组中的相应char添加到HashSet中。当集合的大小为4时,您将获得数组中的四个唯一字母。然后将集合转换为字符串:
ArrayList<Character> list = new ArrayList<>(set);//"set" is the hash set
String result = "";
for (int i = 0; i < list.size(); ++i) {
result += list.get(i).toString();
}
随机化之后,将随机化的字符串保存在result
中。