我正在开发一款游戏,该游戏中有一个组件会根据生物的属性为其指定特定的名称。具体来说,我有一组整数告诉我游戏中的生物拥有哪些属性,我需要根据这些特定属性制定一个名称。
我当时的想法是:为每个数字 1-47 分配一个音节(通过 Hashmap),这样根据动物具有的属性,字符串会有所不同。然而,一个明显的缺陷是字符串太长了。我写了一个算法,如果有超过 4 个音节,它基本上会组合音节。然而,这种方法会产生许多类似的结果,尤其是在将大约 20 个音节缩减为 4 个之后。有没有人对我如何将一系列整数变成一个有点独特的清晰单词有任何想法? (有些副本还可以,但在大多数情况下,我希望每个数字组合都有一个唯一的词)
最佳答案
我正在使用哈希码将整数列表转换为一个 16 位整数。然后将该 int 转换为字符串,假设它是一个以 n 为基数的数字系统,其中 n 是音节数,每个数字都是一个音节。 (通过将 int 限制为 16 位,您可以减少音节)。我不知道这是否有意义,但我希望输出能够满足您的要求。
import java.util.Arrays;
import java.util.List;
public class NameGenerator {
final static List<String> syllables = Arrays.asList("ka", "sa", "ta", "na", "ha", "ma", "ya", "ra", "wa",
"ki", "si", "ti", "ni", "hi", "mi", "yi", "ri", "wi",
"ku", "su", "tu", "nu", "hu", "mu", "yu", "ru", "wu",
"ke", "se", "te", "ne", "he", "me", "ye", "re", "we",
"ko", "so", "to", "no", "ho", "mo", "yo", "ro", "wo");
final static int maxSyllable = syllables.size() - 1;
public static void main(String[] args) {
int[] attributes = new int[]{25, 325, 4, 2, 11, 98, 23};
String name = toName(attributes);
System.out.println("name = " + name);
}
public static String toName(int[] attributes) {
int hashCode = Arrays.hashCode(attributes);
int smallHashCode = (hashCode >> 16) ^ (hashCode & 0xffff);
return toName(smallHashCode);
}
public static String toName(int i) {
if (i < 0) {
i = -i;
}
StringBuilder buf = new StringBuilder();
while (i > maxSyllable) {
buf.append(syllables.get(i % maxSyllable));
i = i / maxSyllable;
}
buf.append(syllables.get(i));
return buf.toString();
}
}
关于java - 将整数列表转换为单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29334311/