You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#复刻Wordle时如何让循环停留当前迭代直至满足条件?

解决Wordle复刻版中无效输入占用数组行的问题

核心问题是当前for循环会无条件递增迭代变量i,不管输入是否有效。要让循环停留在当前行,直到输入有效单词,你需要在获取用户输入时加入一个校验循环,确保只有有效输入才会推进迭代、更新数组和猜测次数。

修改后的关键代码部分

// Convert user word to char to display in board if word is valid
for (int i = 0; i < userGuessChars2D.GetLength(0); i++)
{
    Console.Clear();
    displayBoard();

    string validGuess = null;
    // 循环获取输入,直到得到有效单词
    do
    {
        Console.Write("请输入猜测单词:");
        var input = Console.ReadLine()?.ToLower();
        // 校验输入有效性:非空、在有效词库中
        if (!string.IsNullOrEmpty(input) && (answers.Contains(input) || extras.Contains(input)))
        {
            validGuess = input;
        }
        else
        {
            Console.WriteLine("无效单词,请重新输入!");
            Console.Clear();
            displayBoard(); // 重新显示棋盘,避免提示信息打乱界面
        }
    } while (validGuess == null);

    // 处理正确猜测逻辑
    if (validGuess == answerWord)
    {
        // 将正确单词存入当前行数组
        for (int j = 0; j < userGuessChars2D.GetLength(1); j++)
        {
            userGuessChars2D[i, j] = validGuess[j];
        }
        
        Console.Clear();
        displayBoard();
        Console.WriteLine($"\n恭喜!你猜对了正确单词 {answerWord}!");
        Console.WriteLine("按 [3] + 回车查看统计数据");
        return; // 猜对后直接结束游戏
    }

    // 有效输入存入数组,更新猜测次数
    guessNum++;
    switchColour();
    for (int j = 0; j < userGuessChars2D.GetLength(1); j++)
    {
        userGuessChars2D[i, j] = validGuess[j];
    }
}

// 如果循环结束还没猜对,显示失败信息
Console.Clear();
displayBoard();
Console.WriteLine($"\n游戏结束!正确单词是 {answerWord}");

关键修改说明

  • 新增do-while循环包裹输入逻辑:只有当输入的单词在answers或extras中时,才会退出这个小循环,确保无效输入不会推进外层的for循环。
  • 调整正确猜测的判断时机:放在有效输入获取之后,避免初始时userGuesses为空导致的错误判断。
  • 将数组赋值和guessNum递增逻辑移到有效输入确认之后:无效输入不会修改数组,也不会消耗猜测次数。

额外优化建议

  1. 文件读取可以简化,用File.ReadAllLines替代逐行读取,同时用using语句自动管理文件流,避免手动关闭的风险:
// 替换原文件读取代码
var answers = new List<string>(File.ReadAllLines("WordleAnswers.txt"));
var extras = new List<string>(File.ReadAllLines("WordleExtras.txt"));
  1. 可以提前合并有效词库,减少重复判断:
var validWords = new HashSet<string>(answers);
validWords.UnionWith(extras);
// 后续校验直接用validWords.Contains(input)

内容的提问来源于stack exchange,提问作者12345678i9

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 04:55:13