You need to enable JavaScript to run this app. C#回文校验代码中for循环为何要对name.Length执行减1操作
优惠活动
大模型
产品
解决方案
定价
更多

C#回文校验代码中for循环为何要对name.Length执行减1操作

循环中使用 name.Length - 1 作为起始值的核心原因

这本质是由C#的通用索引规则决定的,没有特殊的语法黑魔法:

  • C# 中字符串、数组、大部分内置集合的索引都是零基计数的:第一个元素的索引是0,最后一个元素的索引固定等于「元素总数量 - 1」,而不是总数量本身。
  • 拿示例里的字符串"Apple"举例子,它的Length属性值是5,对应5个字符的索引分别是0(A)、1(p)、2(p)、3(l)、4(e)。如果不做减1处理,直接让循环从i=5开始取name[i],程序会直接抛出IndexOutOfRangeException——因为有效索引范围最多到4,根本不存在索引为5的字符。
  • 这种起始值设置刚好匹配你这段回文代码的遍历需求:从字符串的最后一个字符开始,每次向前移动一个位置,直到索引走到最开头的0位置停止。整个循环会无遗漏、无重复地把所有字符按倒序拼接到reverse变量里,刚好得到原字符串的反转结果,用于和原串做相等性校验。

可以结合实际运行流程更直观地理解这个逻辑:

i从4开始遍历的完整流程:
i=4: 取name[4] = 'e' → reverse = "e"
i=3: 取name[3] = 'l' → reverse = "el"
i=2: 取name[2] = 'p' → reverse = "elp"
i=1: 取name[1] = 'p' → reverse = "elpp"
i=0: 取name[0] = 'A' → reverse = "elppA"
i=-1: 触发i >= 0的终止条件,退出循环

这是C#入门阶段的常见踩坑点:很多刚从使用1基索引的语言(比如VB6、部分Lua实现)转过来的开发者,经常会漏写这个减1的步骤,首次运行代码就会触发越界异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.09 14:15:05