无法永久替换数组中的值

时间:2016-09-21 16:51:12

标签: c# arrays

我无法永久替换数组成员。当我更改String Clue的值时,显示的字符串仅显示线索的当前值。我认为我们对char []的初始化问题。我试图将它们放在代码的其他部分,但它会产生错误。初学者来了!希望您能够帮助我。谢谢! :)

 private void clues(String clue)
    {
        int idx = numb[wordOn]+4;

        char[] GuessHide = Words[idx].ToUpper().ToCharArray();
        char[] GuessShow = Words[idx].ToUpper().ToCharArray();

            for (int a = 0; a < GuessHide.Length; a++)
            {
                if (GuessShow[a] != Convert.ToChar(clue.ToUpper()))
                    GuessHide[a] = '*';
                else
                    GuessHide[a] = Convert.ToChar(clue.ToUpper());
            }
            Guess(string.Join("", GuessHide));
    }

2 个答案:

答案 0 :(得分:0)

已编辑 - 因为您在代码中每次调用电话时都会对GuessHide进行初始化,并且您没有存储其当前状态,因此您每次都会重置它。不过,您可以在代码中进行一些小的更改,如下所示:

 private static void clues(string clue, char[] GuessHide, char[] GuessShow)
    {
        for (int a = 0; a < GuessHide.Length; a++)
        {
            if (GuessShow[a] == Convert.ToChar(clue.ToUpper()))
            {
                GuessHide[a] = Convert.ToChar(clue.ToUpper());
            }
        }

        Console.WriteLine(string.Join("", GuessHide));
    }

这样称呼:

clues("p", GuessHide, GuessShow);
clues("a", GuessHide, GuessShow);

在外部代码中初始化GuessShow和GuessHide,如下所示:

char[] GuessHide = new string('*', Words[idx].Length).ToCharArray();
char[] GuessShow = Words[idx].ToUpper().ToCharArray();

答案 1 :(得分:0)

public class Program
{

    static string[] Words;
    static string[] HiddenWords;
    public static void Main()
    {
        Words = new string[] { "Apple", "Banana" };
        HiddenWords = new string[Words.Length];

        for (int i = 0; i < Words.Length; i++)
        {
            HiddenWords[i] = new string('*', Words[i].Length);
        }

        Guess('P', 0);
        Guess('a', 0);
        Guess('A', 1);
        Guess('N', 1);

        Console.ReadLine();
    }


    private static void Guess(char clue, int idx)
    {
        string originalWord = Words[idx];
        string upperedWord = Words[idx].ToUpper();
        char[] foundSoFar = HiddenWords[idx].ToCharArray();
        clue = char.ToUpper(clue);

        for (int i = 0; i < upperedWord.Length; i++)
        {
            if (upperedWord[i] == clue)
            {
                foundSoFar[i] = originalWord[i];
            }
        }

        HiddenWords[idx] = new string(foundSoFar);

        Console.WriteLine(HiddenWords[idx]);
    }
}