团结减速和冻结,变得无法实现

时间:2018-03-28 08:02:25

标签: c# unity3d unityscript

当我在我的项目中点击播放时团结停止工作我试图列出可能的组合(所有类型的组合,如3个字母的单词,4个字母的单词,5个字母的单词,最多10个字母)随机生成的10个字母的单词使用嵌套的for循环,我在启动函数中调用函数

{{1}}

类似于单词的长度

2 个答案:

答案 0 :(得分:1)

就像Vidmantas评论的那样,许多for循环会杀死你的计算机。 我建议尝试简化一下。 您是否尝试为一定数量的字母生成一个字符串或所有可能的字符串?

如果您只想要一个字符串,处理它的最佳方法是使用一个for循环:

public string RandomWord (int stringLength)
{
    string word = "";

    for (int i = 0; i < stringLength; i++)
    {
        int num = random.Range(0, 26);
        char letter = (char)('a' + num);
        word += letter;
    }

    return word;
}

参考: https://www.dotnetperls.com/random-lowercase-letter

如果你想获得所有可能的n字母字符串列表,我建议这样做:

public string[] WordList (int stringLength)
{
    List<string> wordList = new List<string>();
    List<byte> letterCounter = new List<byte>();
    String word = "";

    for (int i = 0; i < stringLength; i++)
    {
        letterCounter.Add(0);
    }

    while (letterCounter[0] < 25)
    {
        for (int i = 0; i < stringLength; i++)
        {
            char letter = (char)('a' + letterCounter[i]);
            word += letter;
        }

        wordList.Add(word);
        letterCounter[stringLength]++;

        for (int i = stringLength; i > 0; i--)
        {
            if (letterCounter[i] >= 26)
                if (i > 0)
                    letterCounter [i - 1]++;
        }
    }

    return wordList.ToArray();
}

如果你想获得一定长度的所有字典单词列表,我建议你设置一个字典数据库并从那里获取它们。

希望这有帮助!

答案 1 :(得分:0)

编辑: 在测试我意识到的代码时,这并不是您正在寻找的代码,因为它提供了所有可能性。也是多次使用相同字母的。我需要更多地思考如何改进它。如果有人知道该怎么做,请随时出示。

好的,如果我理解你的评论,那么这应该是你想要的。

public List<string> WordList (int stringLength, string inputWord)
{
    List<string> wordList = new List<string>();
    List<byte> letterCounter = new List<byte>();
    String word = "";

    char[] letters = inputWord.ToCharArray();

    for (int i = 0; i < stringLength; i++)
    {
        letterCounter.Add(0);
    }

    while (letterCounter[0] < 10)
    {
        for (int i = 0; i < stringLength; i++)
        {
            char letter = letters[letterCounter[i]];
            word += letter;
        }

        wordList.Add(word);
        letterCounter[stringLength]++;

        for (int i = stringLength; i > 0; i--)
        {
            if (letterCounter[i] >= 10)
                if (i > 0)
                    letterCounter [i - 1]++;
        }
    }

    return wordList;
}

现在你只需要将结果列表与你的字典进行比较,然后扔出非字。