不能永久替换数组中的值

本文关键字:数组 替换 不能 | 更新日期: 2023-09-27 18:08:13

不能永久替换数组成员。当我改变字符串线索的值时,所显示的字符串只显示线索的当前值。我认为问题出在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));
    }

不能永久替换数组中的值

Edited -由于您在代码中的每次调用时都初始化了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();
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]);
    }
}