我正在自己完成Joyce Farrell的Visual C#2012(这不是一项家庭作业)。过去两天我一直坚持这个,并且还没有找到我理解的答案。我正在寻找一个简单的程序 - 没什么特别的,因为我可能还没读过那一章。 :-)我遇到的问题是,当我试图显示''是否有未猜到或错误猜到的字母时。如果我指定''它对第一个字母看起来很好,但是当用户输入第二个猜测时,它会将第二个猜测改为'?'。这是为什么?任何帮助将非常感激。谢谢。
static void Main(string[] args)
{
string[] mysteryWordList = { "green", "snowflake", "tree", "joy", "red", "gift", "frozen", "merry" };
string mysteryWord; // hidden word
char[] mysteryWordArray;
char letterGuessed;
char[] guessWordArray;
Random ranNumberGenerator = new Random(); // generate a random number, at least 0 but < 8
int randomNumber = ranNumberGenerator.Next(0, 8);
mysteryWord = mysteryWordList[randomNumber]; // select a word from list using random number
Console.WriteLine("The Mystery word is: " + mysteryWord); // print word for my validation
mysteryWordArray = mysteryWord.ToArray(); // put mystery word into array to compare against guessWord array
Console.Write("MysterywordArray is: ");
Console.WriteLine(mysteryWordArray);
guessWordArray = new char[mysteryWord.Length]; // assign length to user guess array
// write mystery word in *'s
for (int x = 0; x < mysteryWord.Length; ++x)
Console.Write("*");
//guessWordArray[x] += '%'; adds value and then does not work...
Console.WriteLine();
while (guessWordArray != mysteryWordArray)
{
Console.Write("\nPlease guess a letter: ");
letterGuessed = Convert.ToChar(Console.ReadLine());
for (int x = 0; x < mysteryWord.Length; ++x)// go through each letter in mystery word
{
if (letterGuessed == mysteryWordArray[x]) // if match do this
{
Console.WriteLine("Yes, the letter {0} is in the mystery word!", letterGuessed);
guessWordArray[x] += letterGuessed;
}
if (letterGuessed != mysteryWordArray[x] && guessWordArray[x] == default(char)) // if match do this
guessWordArray[x] += '*';
}
Console.Write("Mystery Word: ");
Console.WriteLine(guessWordArray);
}
}
答案 0 :(得分:4)
命令guessWordArray[x] += letterGuessed;
错误。它会将字母添加到数组中,它实际上会更改数组中的第X个元素。例如,如果guesswordArray包含{ 'a', 'b', 'c' }
guesswordArray[0] += 'a'
转换为guessWordArray[2] = 'a' + 'a'
。通过将字符转换为ascii代码然后将结果转换为字符来完成字符添加。这意味着'a'== 97
'a'+'a' == 194'
然后194从ascii表转换回一个奇怪的字符。
答案 1 :(得分:2)
这两行:
guessWordArray[x] += letterGuessed;
....
guessWordArray[x] += '*';
应该是这样的:
guessWordArray[x] = letterGuessed;
....
guessWordArray[x] = '*';
通过此+=
运算符,您将来自用户输入的char附加到保存在数组中的现有char。这将产生特殊的字符,这在控制台中无法很好地显示(这就是为什么你看到了?
字符的原因)。我认为您需要使用=
而不是+=
来分配输入字符并替换现有字符
答案 2 :(得分:2)
字符基本上是最基本形式的整数。当您尝试向阵列中添加后续字母时,您正在使用+=
将字符添加到一起。初始字符'*'是ASCII代码42,所以当你选择一个新字母('g',例如“gift”中),你正在向那个42添加103时,正在发生的事情是什么,而值为145的ASCII字符是存储在数组中。控制台无法正确显示该值。您只需使用赋值运算符,因为您希望在当前索引处将新字符写入数组。
guessWordArray[x] = letterGuessed;
guessWordArray[x] = '*';