C#字符数组 - 分配,更改,显示

时间:2014-01-25 01:31:54

标签: c# arrays

我正在自己完成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);



        }
    }

3 个答案:

答案 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] = '*';