java - 如果不超过 12 个字符的限制,则匹配随机选择的 2 个字符串?

标签 java random character generator limit

我有一个字符串数组:

String[] possible_names = { "dog", "cat", "man", "woman", "boy", "girl", "table", "chair", "computer", "fat", "phone" };

我想通过从数组中选择 2 个字符串并将它们组合来生成一个字符名称,例如:

Random rn = new Random();
String first_name = possible_names[rn.nextInt(possible_names.length - 1)];
String last_name = possible_names[rn.nextInt(possible_names.length - 1)];
String full_name = first_name + last_name;

问题是,如果全名超过 12 个字符,或者 first_name == last_name,我无法让它生成全名。

我知道只检查字符是否超过 12 或名字和姓氏是否相等并返回会很容易,但我希望它只是..我想如果失败再试一次。

我已经想出了一个方法来做到这一点,但我希望它更有效率而不是消耗内存:

ArrayList<String> acceptable_last_names = new ArrayList<String>();
Random rn = new Random();
String first_name = possible_names[rn.nextInt(possible_names.length - 1)];
for (String s : possible_names) {
    if (s.length < (12 - first_name.length)) {
        if (!s.equalsIgnoreCase(first_name)) {
            acceptable_last_names.add(s);
        }
    }
}
last_name = acceptable_last_names.get(rn.nextInt(acceptable_last_names.size());

我不知道该代码是否完全有效,因为我在此处输入了它,但我知道我可以像那样做。我的问题是,是否有更有效的方法来实现这一目标?

最佳答案

我会做的是:

  1. 创建一个字典,其中键是长度,值是具有相同长度的单词数组
  2. 从键列表中选择一个随机数并获取值(也就是第一个长度)
  3. 从包含值的数组中选择一个随机数
  4. 选择一个随机数,其中最大长度 = 12 - 第一个长度
  5. 选择一个新词(如第 3 步)
  6. 利润

关于java - 如果不超过 12 个字符的限制,则匹配随机选择的 2 个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46155132/

相关文章:

其字段只能由其子类访问的 Java 类(没有 getter/setter)?

c - 反向打印字符串而不在代码中反转

c中的指针可以指向字符吗

python - python中的随机微积分库

javascript - 有人会解释这段计算字符的代码吗?

java - 我必须为 Play Framework Filters 导入哪个包

java - 拖放 : startDrag deprecated

java - 当我单击“计算”按钮以显示我的结果时应用程序崩溃

php - 将 ORDER BY RAND() 与多个 WHERE 子句一起使用 mysql

haskell - Rand monad 的 MonadFix 实例