我想尝试从数组中创建唯一的名称。
public String[] firstname = {"Ben", "Pe", "To", "Jau",...};
在这里我创建了一个String(Helper.random只是一个选择随机元素的方法)。我想避免像“Benben”或“Pepe”这样的名字...
String name1 = firstname[Helper.random(0, firstname.length)];
String name2 = firstname[Helper.random(0, firstname.length)];
if(name1.equals(name2)) {
name1 = firstname[Helper.random(0, firstname.length)];
}
现在我被卡住了。我创建了一些名字,但后来我在这里找到像“Benpe”和“Benpe”那样的复制品。
如何创建唯一名称,例如:
在所有组合中从此阵列创建一个STRING名称(“Bento”,Benpe“,”Bento“.....)
如果你得到一个重复(“Bento”,Bento“)添加另一个元素来命名(”Bentope“)
答案 0 :(得分:1)
一个快速的解决方案是将if
更改为循环。如果你连续多次获得相同的名字,你需要继续尝试。
while (name1.equals(name2)) {
name1 = firstname[Helper.random(0, firstname.length)];
}
请注意,if
和while
提示都不符合规范。您应该在名称中添加第三项,而不是替换name1
。
答案 1 :(得分:0)
我会添加一个子句来检查当前生成的名称的哈希值。如果它存在,那么我们知道我们需要为现有字符串添加另一个名称。再次检查......清洗,冲洗,重复。
例如: `
String[] names = {"Mike", "Bill", "Jerry", "Frank", "Poul", "Terry"};
HashMap<String, Integer> nameMap = new HashMap<String, Integer>();
Random rand = new Random();
for (int i=0; i<10; i++) {
String myFirstName = names[rand.nextInt(names.length)];
String mySecondName = names[rand.nextInt(names.length)];
String concatName = myFirstName + " " + mySecondName;
if ( ! nameMap.containsKey(concatName) ) {
nameMap.put(concatName, 1);
} else {
// try adding a third name
String myThirdName = names[rand.nextInt(names.length)];
String newName = concatName + " " + myThirdName;
if ( ! nameMap.containsKey(newName) ) {
nameMap.put(newName, 1);
} else {
System.out.println(newName + " already exists in the name map");
}
}
}
`