c# - 如何修复我的列表以允许它一次检查一个字母?
问题描述
我在 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;
}
}
}
解决方案
一些技巧:
//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
应该是类级别的属性/字段,以便在单击按钮之间记住它们的状态
推荐阅读
- c# - 如何在 C# 中动态删除字符串中的最后一个字符
- dictionary - 由于 `HashMap.getOrDefault()` 函数中的接收器类型不匹配,以下候选均不适用
- python - 为什么即使我有一些命令,该过程也会停止?
- django - Django 更改图像格式和质量
- java - 如何在锁定屏幕中打开新视频
- r - 使用 lubridate 计算两个日期之间的天数差异
- android - 有什么方法可以在 Flutter 的 Google Chrome 中启动 URL?
- c# - Blazor SignInManager PasswordSignIn() 方法抛出 InvalidOperationException
- python - 对于同一个问题,R & Python 显示了两个不同的结果。背后的原因是什么?
- python - 解析时区并转换为夏令时