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

遍历数组时出现Out of bounds error越界错误,求排查与修复方法

数组越界问题排查及修复方案

问题根因

  • 循环边界逻辑错误:你声明的数组上限为20,数组索引默认从0开始,有效索引范围是0~19,而你写的循环条件是i <= 20,当i自增到20时会直接访问超出数组范围的下标,触发越界错误。即使if判断中写了i <20的条件也无法规避,因为代码会先执行Name[i].ToLower()读取数组元素,再判断i是否小于20,数组越界已经先发生了。
  • 额外逻辑漏洞1:用户输入搜索内容时你使用了Console.Read(),该方法仅读取用户输入的第一个字符的ASCII值,转换为字符串后得到的是ASCII码对应的字符串,无法获取用户输入的完整游戏名称,会导致匹配逻辑完全失效。
  • 额外逻辑漏洞2:当前代码每遍历一个元素不匹配就会输出「No match found」提示,即使目标匹配项存在也会先输出多条不匹配提示,不符合功能预期。
  • 额外语法漏洞:if(Answer == "Y")的代码块结束后直接写了清理逻辑的独立代码块,该代码块不管用户选Y还是N都会执行,不符合正常分支逻辑。

可行修复方案

  1. 修改循环边界条件为i < 20,删除if判断中冗余的i <20条件
  2. 将读取搜索内容的方法换成Console.ReadLine(),获取用户输入的完整字符串
  3. 新增匹配结果标记变量,遍历完全部数组后再统一输出是否匹配的提示
  4. 调整分支结构,把清理逻辑放到所有分支外,保证执行顺序符合预期

修正后可运行代码

Console.Clear();
// 变量声明可与你原有代码的定义对齐
string Answer = "";
string search = "";
// 以下三个数组为原有预定义数组,保留你自己的初始化逻辑即可
string[] Name = new string[20];
string[] Publisher = new string[20];
string[] Genre = new string[20];

Console.WriteLine("Would you like to search for an entry? Y/N.");
Answer = Convert.ToString(Console.ReadLine())?.ToUpper() ?? "";
Console.Clear();

bool hasMatch = false;
if (Answer == "Y")
{
    Console.WriteLine("Please enter the game you'd like to search for: ");
    // 替换为ReadLine获取用户输入的完整内容
    search = Convert.ToString(Console.ReadLine()) ?? "";
    // 修正循环边界,避免越界
    for (int i = 0; i < 20; i++)
    {
        // 跳过未赋值的空元素,避免空引用报错
        if (string.IsNullOrEmpty(Name[i])) continue;
        
        if (search.Equals(Name[i], StringComparison.OrdinalIgnoreCase))
        {
            Console.WriteLine("Match Found!");
            Console.WriteLine(" ");
            Console.WriteLine($"Game: {Name[i]}. Publisher: {Publisher[i]}. Genre: {Genre[i]}");
            hasMatch = true;
        }
    }
    // 遍历完全部元素后统一输出不匹配提示
    if (!hasMatch)
    {
        Console.WriteLine("No match found! Check spelling.");
    }
}              

// 全局清理逻辑
Console.WriteLine("Clearing lines");
Console.Clear();
Console.WriteLine("End of program. Thank you for logging data. Press any key to exit");
Console.ReadKey();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:36:01