java - 有没有更好的方法让我的计算机对手生成 (3 > 随机长度 <= 7) 的单词?

标签 java random

我已经实现了以下方法来执行此操作,但我仍然发现很多时候它只生成三个字母的单词。有时,它确实会出现四个字母、五个字母等单词,但大多数仍然是三个字母。有没有其他方法可以保证真正的随机性,使其始终变化且从不重复?如果我需要进一步澄清,请告诉我。这是一个类似拼字游戏的游戏,我正在其中构建 Java 编程类(class)的最终项目。 TIA!

这是我的代码:

//METHOD - getWordFromComputer
public static String getWordFromComputer(char[] let)
{
    Random rand = new Random();
    rand.setSeed(System.currentTimeMillis());
    String word = "";
    boolean done = false;
    while(!done)
    {
        word = "";
        boolean[] used = new boolean[7];
        int lettersUsed = 0;
        int max = 7;
        int min = 3;
        int size = rand.nextInt((max - min) + 1) + min;//Code provided by: mkyong.com
        while(lettersUsed < size)
        {
            int i = rand.nextInt(7); //Random from 0 to 6 (7)
            if(!used[i]) { //The current index hasn't been chosen yet
                used[i] = true;
                lettersUsed++;
                if(let[i] != '_') {
                    word += let[i];
                } else {
                    word += letters[rand.nextInt(26)];
                }
            }
        }
        if(wordVerify(word)) {
            done = true;
        }
    }
    return word;
}

最佳答案

您的代码的问题在于您正在生成随机长度的单词,并尝试它是否有效。短单词有效的概率要高得多。解决方案是生成一次长度,然后进入 while 循环尝试不同的单词,直到其中一个有效。

关于java - 有没有更好的方法让我的计算机对手生成 (3 > 随机长度 <= 7) 的单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58929428/

相关文章:

java - WSDL 中忽略的 JAX-B 全局绑定(bind)

random - 测试 PRNG 的质量

c++ - 使用 C++ 的高斯分布无均值和标准差

php - 如何从加权列表中挑选 4 个独特的项目?

c++ - 如何使用 uniform_real_distribution 生成不同的数字?

python - 在python中,如何生成一个范围内的随机整数,不包括列表中的某些数字?

java - java中数组返回错误

java - 在图书馆类(class)中获取用户输入并确保其是积极的

java - 将日期转换为不同的格式

java - 如何使用适用于 Android 的 Google Fit API 查找步数?