当我在我的项目中点击播放时团结停止工作我试图列出可能的组合(所有类型的组合,如3个字母的单词,4个字母的单词,5个字母的单词,最多10个字母)随机生成的10个字母的单词使用嵌套的for循环,我在启动函数中调用函数
{{1}}
类似于单词的长度
答案 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;
}
现在你只需要将结果列表与你的字典进行比较,然后扔出非字。