Java 如何在不重复的情况下生成随机字符?
如果再次调用,我希望函数从A-Z生成随机字符而不重复。例如,我首先在main中调用它,它生成一个角色。如果我第二次调用它,它应该不会再次生成一个。怎么做Java 如何在不重复的情况下生成随机字符?,java,random,Java,Random,如果再次调用,我希望函数从A-Z生成随机字符而不重复。例如,我首先在main中调用它,它生成一个角色。如果我第二次调用它,它应该不会再次生成一个。怎么做 public static void random(){ Random r = new Random(); char c = (char)(r.nextInt(26) + 'A'); System.out.print(c); } 如果这有帮助的话,我打算把它作为一个键放在hashmap上,它不应该有相同的字符。我想你可
public static void random(){
Random r = new Random();
char c = (char)(r.nextInt(26) + 'A');
System.out.print(c);
}
如果这有帮助的话,我打算把它作为一个键放在hashmap上,它不应该有相同的字符。我想你可以使用这样的代码列表
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);
}
publicstaticvoidmain(字符串参数[]){
List listChar=new ArrayList();
//把你所有的角色都放在这个列表中
对于(int i=0;i我成功地修复了它。如果有人想知道如何修复,我会保持这个论坛。它在hashmap中,所以我只需要设置一个条件hashmap.containsKey()
当您有一个较小的固定限制时,更经济的做法是预先生成整个随机序列,然后一次只取一个字符:
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);
}
List sequence=new ArrayList();
对于(char c='A';c我认为最合适的方法是使用以下结构:
//为随机字符串定义有效符号
允许的私有静态最终字符串_CHARACTERS=“0123456789ABCDEFGHIjklmnopqrStuvxyzabCDEFGHIjklmnopqrStuvxyz”;
//生成字符串
公共字符串随机字符串(int-len){
StringBuilder sb=新StringBuilder(len);
对于(int i=0;i
我设置了一个条件,它也能工作,但我认为它也能工作。谢谢!你很高兴你的修复被破坏了。它很可能会产生重复。发生这种情况的原因是无法保证随机生成器不会连续产生两个冲突。你的代码假设第二个r.nextInt(26)不会碰撞,但它不是真的。考虑一个哈希图,填充了26个位置中的25个。击中未填充点的概率非常低,所以第二个调用不会给你一个唯一的点的机会非常高。@达斯布林克恩亮你是正确的!谢谢你通知我。我试过你的修复,它肯定是有效的。谢谢!H!这到底能解决不重复结果的问题吗?这限制了字符集,但OP并没有这样问。
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);
}
// 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();
}