我想让函数从A-Z生成随机字符而不重复,如果再次调用它。例如,我首先在我的主要调用它,它生成一个A字符。如果我第二次打电话,它不应再生成A.怎么做?
HashMap
如果这有帮助,我计划将它作为一个键放在一个hashmap上,它不应该有相同的字符。
答案 0 :(得分:1)
我认为你可以使用像这个代码片段的列表,
public static void main(String args[]) {
List<Character> listChar = new ArrayList<>();
//put all your character in this list
for (int i = 0; i <= 26; i++) {
char c = (char) (i + 'A');
listChar.add(c);
}
Random r = new Random();
int id = r.nextInt(listChar.size());
char c = (char) (id + 'A');
System.out.print(c);
listChar.remove(id);
}
我希望这可以给你和想法
答案 1 :(得分:1)
当你有一个小的固定限制时,预先生成整个随机序列,然后一次取一个字符更经济:
List<Character> sequence = new ArrayList<>();
for (char c = 'A' ; c <= 'Z' ; c++) {
sequence.add(c);
}
Collections.shuffle(sequence);
for (Character c : sequence) {
System.out.print(c);
}
上述方法会创建sequence
所有字母A
到Z
,然后将random shuffle应用于demo。
您获得的序列是随机顺序。你可以从中取出物品,而不必担心它们会重复。
答案 2 :(得分:0)
我设法解决了这个问题。如果有人想知道如何,我会保持这个论坛。它在一个hashmap中,所以我只是设置了hashmap.containsKey()
Random r = new Random();
char c = (char)(r.nextInt(26) + 'A');
if(hm.containsKey(c)){
c = (char)(r.nextInt(26) + 'A');
hm.put(c, newValue);
}
else
hm.put(c, newValue);
答案 3 :(得分:0)
我认为最合适的方法,只需使用以下SecureRandom构造:
// define valid symbols for random string
private static final String ALLOWED_CHARACTERS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
// generate the string
public String randomString(int len) {
StringBuilder sb = new StringBuilder(len);
for (int i = 0; i < len; i++) {
sb.append(ALLOWED_CHARACTERS.charAt(secureRandom.nextInt(ALLOWED_CHARACTERS.length())));
}
return sb.toString();
}