【发布时间】:2013-08-07 17:48:03
【问题描述】:
所以我用 c# 制作了一个非常简单的单词生成器程序,效果相对较好。它根据用户定义的长度生成一个单词。
该算法为序列中的每个连续字母添加一个辅音,然后添加一个元音,这并不理想,但对于基本单词来说已经足够了。
我唯一的问题是,如果“q”出现在它之前,我告诉它在字母序列中添加一个“u”,但无论我做了什么,它都会使单词至少 1 个字母太长.
我在上面的评论中用星号标记了我的问题区域。代码如下:
public void WordFinder()
{
string word = null;
int cons;
int vow;
//counter
int i = 0;
bool isword = false;
Random rnd = new Random();
//set a new string array of consonants
string[] consonant = new string[]{"b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","y","z"};
//set a new string array of vowels
string[] vowel = new string[]{"a","e","i","o","u"};
while (isword == false)
{
word = null;
Console.WriteLine("Pick the length of a word");
int num = Convert.ToInt32(Console.ReadLine());
//set the counter "i" to 1
i = 1;
if (num%2 == 0)
{
while (i <= num)
{
if (num != 1)
{
// current consonant = random consonant
cons = rnd.Next(0, 20);
// get the consonant from the string array "consonant" and add it to word
word = word + consonant[cons];
// add 1 to counter
i ++;
//* if the consonant is "q"
if (cons == 12)
{
// add "u" right after it
word = word + vowel[4];
// add 1 to counter
i++;
}
}
vow = rnd.Next(0, 4);
word = word + vowel[vow];
i ++;
}
}
if (num % 2 != 0)
{
while (i <= num - 1)
{
//repeat same code as done to even length
if (num != 1)
{
cons = rnd.Next(0, 20);
word = word + consonant[cons];
i ++;
if (cons == 12)
{
word = word + vowel[4];
i ++;
}
}
vow = rnd.Next(0, 4);
word = word + vowel[vow];
i ++;
}
// if the length is not equal to 1
if (num != 1)
{
// add a consonant to the end of the word
cons = rnd.Next(0, 20);
word = word + consonant[cons];
}
//if the length is 1
else if (num == 1)
{
// pick a vowel
vow = rnd.Next(0, 4);
word = word + vowel[vow];
}
}
i = 1;
Console.WriteLine(word);
Console.WriteLine("Is this a word? (y/n)");
string q = Console.ReadLine();
q = q.ToLower();
//if the answer is yes, then it is a word and end the loop
if (q == "y" || q == "yes")
{
isword = true;
}
//if the answer is no try the loop again
else if (q == "n" || q == "no")
{
isword = false;
}
}
}
// main method
static void Main(string[] args)
{
Program prog = new Program();
prog.WordFinder();
//wait for user input
Console.ReadLine();
}
}
【问题讨论】:
-
该代码中的几乎所有 cmets 都没有帮助。注释应该在那里告诉您代码没有告诉您的信息(或者从代码中不明显)。仅说明代码的确切功能的评论对任何人都没有帮助,只会浪费人们的时间。
-
我不明白 它使单词成为字母(或者在“u”之后添加“q”的次数变长是什么意思。你可能尝试使用
consonant[cons] == 'q'作为您的if条件,而不是您那里的幻数 12。 -
我正在阅读此内容的方式,每次通过循环,您都添加 2 个字母。一个辅音和一个元音。在生成
Q的情况下,您总共添加了 3 个字母:QU加上一个随机的其他元音。这里的逻辑似乎离题了。 -
@OrrenRavid:你不必为你的 cmets 道歉。那是建设性的批评,而不是陈旧的批评。 @servy 只是注意到你在用像
i++; // add one to i这样的 cmets 来浪费你的时间。把你的 cmets 留给那些难以理解的东西,这样你就可以节省时间和精力。哪个好! -
@Will 您是否还会在此类 cmets 上浪费读者的时间,冒着随着代码更改而导致 cmets 不同步的风险(这意味着它要么是错误的,因此令人困惑,要么是更新所有内容的维护成本) cmets),也使得找到真正有意义的 cmets 变得更加困难。如果你强迫读者因为它们是绒毛而忽略所有的 cmets,他们也会跳过他们真正需要阅读的重要内容。
标签: c#