首页 > 解决方案 > 如何修复我的列表以允许它一次检查一个字母?

问题描述

我在 C# 基础上,我需要创建一个拼写测试/刽子手,用户将在其中输入单词,如果它与秘密单词匹配,它将按字母检查。我创建了一个 for 循环来检查这个词,但出现一个错误,说它只能在字母上,因为它当然是一个字符?有什么办法解决这个问题吗?

     public frmMain()
    {
        InitializeComponent();


               string[] listwords = new string[10];
        listwords[0] = "jungle";
        listwords[1] = "forest";
        listwords[2] = "horse";
        listwords[3] = "beetle";
        listwords[4] = "nature";
        listwords[5] = "monkey";
        listwords[6] = "autumn";
        listwords[7] = "spring";
        listwords[8] = "flower";
        listwords[9] = "birds";

        Random randGen = new Random();
        var idx = randGen.Next(0, 9);
        string guessWord = listwords[idx];
        char[] guess = new char[guessWord.Length];
        Console.Write("please enter your guess : ");

        for (int i = 0; i < guessWord.Length; i++)
            guess[i] = '*';

        while (true)
        {
            char userGuess = char.Parse(txtGuess.Text);
            for (int i = 0; i < guessWord.Length; i++)
            {

                if (userGuess == guessWord[i])
                    guess[i] = userGuess;
            }

        }
    }

标签: c#stringcharlistbox

解决方案


一些技巧:

//all this
char[] guess = new char[guessWord.Length];
for (int i = 0; i < guessWord.Length; i++)
        guess[i] = '*';


//can be replaced with
char[] guess = new string('*', guessWord.Length).ToCharArray();

//this fails if .Text is not a string of length 1
char userGuess = char.Parse(txtGuess.Text);

//consider this:
char userGuess = (txtGuess.Text + '*')[0];

字符串可以像数组一样被索引。"Hello world"[3]是 char l。在文本末尾添加 a*并取第一个 char[0]相对健壮;它的长度总是至少为 1,如果用户没有输入任何内容,则该操作是无操作的(将 * 替换为 *)


你在构造函数中的代码,在while循环中,应该放在一个按钮点击处理程序中。在表单中添加一个按钮,双击它并将代码放在那里。构造函数中没有无限循环。

您的string guessWord并且char[] guess应该是类级别的属性/字段,以便在单击按钮之间记住它们的状态


推荐阅读