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

基于while循环与条件判断的方向键输入迭代问题及代码修正需求

代码修复与功能实现

问题根源

  1. 仅响应首次按键:你在循环外只读取了一次按键到input变量,循环内始终用这个初始值判断,根本没获取后续按键;而且while条件里的Console.ReadKey()会额外吃掉一次输入,导致逻辑混乱。
  2. 缺少坐标判断的循环控制:原代码没把p1.X ==5 && p1.Y ==2作为循环终止条件。

修复后的代码

Point p1 = new Point(5, 2);
ConsoleKeyInfo input;

// 循环条件:未回到初始坐标(5,2) 且 未按下Esc键
while ((p1.X != 5 || p1.Y != 2) || input.Key != ConsoleKey.Escape)
{
    input = Console.ReadKey(true); // true参数避免按键在控制台显示
    
    if (input.Key == ConsoleKey.UpArrow)
    {
        p1.Y++;
        Console.WriteLine($"当前坐标:X={p1.X}, Y={p1.Y}");
    }
    else if (input.Key == ConsoleKey.DownArrow)
    {
        p1.Y--;
        Console.WriteLine($"当前坐标:X={p1.X}, Y={p1.Y}");
    }
    else if (input.Key == ConsoleKey.LeftArrow)
    {
        p1.X--;
        Console.WriteLine($"当前坐标:X={p1.X}, Y={p1.Y}");
    }
    else if (input.Key == ConsoleKey.RightArrow)
    {
        p1.X++;
        Console.WriteLine($"当前坐标:X={p1.X}, Y={p1.Y}");
    }
    // 按下Esc直接退出循环
    else if (input.Key == ConsoleKey.Escape)
    {
        break;
    }
}

Console.WriteLine("循环结束:回到初始坐标或按下了Esc键");

关键修改点

  • 实时获取按键:把input = Console.ReadKey(true)移到循环内部,每次迭代都读取最新的按键输入,true参数可以避免按键字符直接显示在控制台,让输出更整洁。
  • 循环控制逻辑:修改循环条件为(p1.X != 5 || p1.Y != 2) || input.Key != ConsoleKey.Escape,同时支持两种终止方式:回到(5,2)坐标,或者主动按下Esc键。
  • 优化输出:每次更新坐标后输出完整的X、Y值,方便直观查看当前位置。

内容的提问来源于stack exchange,提问作者Nick Gatsfield

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 02:47:07