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

C# C字符数组-分配、更改、显示,c#,arrays,C#,Arrays,我正在自己完成乔伊斯·法雷尔的视觉C2012,这不是家庭作业。在过去的两天里,我一直被这个问题困扰着,还没有找到一个我能理解的答案。我正在寻找一个简单的程序-没有什么新奇的,因为我可能还没有读过那一章我遇到的问题是,当我试图显示一个未猜到或猜错的字母时。如果我为第一个字母指定它看起来不错,但是当用户输入第二个猜测时,它会将第二个猜测更改为“?”。为什么呢?任何帮助都将不胜感激。多谢各位 static void Main(string[] args) { strin

我正在自己完成乔伊斯·法雷尔的视觉C2012,这不是家庭作业。在过去的两天里,我一直被这个问题困扰着,还没有找到一个我能理解的答案。我正在寻找一个简单的程序-没有什么新奇的,因为我可能还没有读过那一章我遇到的问题是,当我试图显示一个未猜到或猜错的字母时。如果我为第一个字母指定它看起来不错,但是当用户输入第二个猜测时,它会将第二个猜测更改为“?”。为什么呢?任何帮助都将不胜感激。多谢各位

    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);



        }
    }
这两条线:

guessWordArray[x] += letterGuessed;
....
guessWordArray[x] += '*';
应该是这样的:

guessWordArray[x] = letterGuessed;
....
guessWordArray[x] = '*';
通过这个+=操作符,您可以将用户输入的字符附加到数组中保存的现有字符。这将产生特殊的字符,而这些字符不会在控制台中很好地显示出来,这就是为什么你们会看到这种情况?烧焦我认为您只需分配输入字符,并使用=代替+=

这两行替换现有字符:

guessWordArray[x] += letterGuessed;
....
guessWordArray[x] += '*';
应该是这样的:

guessWordArray[x] = letterGuessed;
....
guessWordArray[x] = '*';
通过这个+=操作符,您可以将用户输入的字符附加到数组中保存的现有字符。这将产生特殊的字符,而这些字符不会在控制台中很好地显示出来,这就是为什么你们会看到这种情况?烧焦我认为您只需要分配输入字符,并通过使用=而不是+=

命令guessWordArray[x]+=letterGuessed替换现有字符;这是错误的。它不会将字母添加到数组中,实际上会更改数组中的第X个元素。例如,如果guesswordArray包含{a',b',c'}

guesswordArray[0]+='a'转换为guesswordArray[2]='a'+'a'。字符添加是通过将字符转换为ascii码来完成的,然后将结果转换为字符。这意味着'a'==97'a'+'a'==194',然后194从ascii表转换回一个奇怪的字符。

命令guessWordArray[x]+=letterGuessed;这是错误的。它不会将字母添加到数组中,实际上会更改数组中的第X个元素。例如,如果guesswordArray包含{a',b',c'}


guesswordArray[0]+='a'转换为guesswordArray[2]='a'+'a'。字符添加是通过将字符转换为ascii码来完成的,然后将结果转换为字符。这意味着'a'==97'a'+'a'==194',然后194从ascii表转换回一个奇怪的字符。

字符本质上是最基本形式的整数。当您试图向数组中添加后续字母时,您使用的是+=将字符添加到一起。初始字符“*”是ASCII码42,因此,当您选择一个新字母“g”时,例如在礼品中,您要将103添加到该42,并且值为145的ASCII字符存储在数组中。控制台无法正确显示该值。您只需使用赋值运算符,因为您希望将新字符写入当前索引处的数组

guessWordArray[x]=字母猜测


guessWordArray[x]='*'

字符本质上是最基本形式的整数。当您试图向数组中添加后续字母时,您使用的是+=将字符添加到一起。初始字符“*”是ASCII码42,因此,当您选择一个新字母“g”时,例如在礼品中,您要将103添加到该42,并且值为145的ASCII字符存储在数组中。控制台无法正确显示该值。您只需使用赋值运算符,因为您希望将新字符写入当前索引处的数组

guessWordArray[x]=字母猜测


guessWordArray[x]='*'

谢谢你的及时回复。好极了成功了!我应该早点发布到她身上。通过这个+=操作符,您可以将用户输入的字符附加到数组中保存的现有字符。我认为您只需要分配输入字符,并使用=而不是+=替换现有字符。哦,这很有意义!!谢谢你的解释。很高兴我加入了!直到下次……感谢您的及时回复。好极了成功了!我应该早点发布到她身上。通过这个+=操作符,您可以将用户输入的字符附加到数组中保存的现有字符。我认为您只需要分配输入字符,并使用=而不是+=替换现有字符。哦,这很有意义!!谢谢你的解释。很高兴我加入了!直到下一次…+1解释他的代码为什么有错误以及如何修复它。+1解释他的代码为什么有错误以及如何修复它。感谢所有的帮助,我的问题已经成功回答。感谢所有的帮助,我的问题已经成功回答。