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

取余运算符调试数组越界的逻辑及防越界原理解析

取余运算符调试数组越界的逻辑及防越界原理

核心逻辑:用取余实现索引的循环映射

数组越界的本质是使用了超出数组合法索引范围的数值——比如长度为N的数组,合法索引是0到N-1,一旦索引≥N或<0,就会触发越界错误。

取余运算符%的核心作用是:把任意整数索引映射到0到N-1的合法区间内,实现数组的循环访问。对于正数来说,X % N的结果必然满足0 ≤ 结果 < N,因为余数的定义就是小于除数且非负的整数,刚好匹配数组的合法索引范围。

结合加密场景的具体说明

以你提供的加密场景为例:

  • 字母表数组alphabet长度为26,合法索引是0-25
  • 字符y的索引是24,向右偏移3位后得到24+3=27,27≥26,直接访问alphabet[27]会触发数组越界
  • 改用(24+3)%26 = 27%26 = 1,对应alphabet[1]即字符b,完美实现了“从y往后偏移3位(y→z→a→b)”的循环加密逻辑,同时完全避免了越界

对应代码解析

以下是实现该逻辑的Swift代码,关键就是(a+3)%26这一步:

var alphabet: [Character] = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]

var secretMessage = "codecademy"
var message = Array(secretMessage)

for h in 0..<message.count {
    for a in 0..<alphabet.count {
        if message[h] == alphabet[a] {
            // 用取余运算将偏移后的索引限制在0-25范围内,彻底避免越界
            message[h] = alphabet[(a+3)%26]
            break
        }
    }
}

这段代码里,不管a+3的计算结果多大(比如a=25时,25+3=28,28%26=2),取余后的结果始终在0-25之间,永远不会超出alphabet的索引范围,从根本上杜绝了数组越界错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:15:36