java创建一个随机的独特CHAR STRING

时间:2017-03-31 16:11:01

标签: java

我想创建一个包含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

2 个答案:

答案 0 :(得分:0)

现在已经提供了适当的信息,这个问题需要一些关闭。

而不是char[] randCodeStringBuilder 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中。