debugging 使用余数运算符调试超出范围的数组的逻辑是什么?%是如何防止它超出范围的?

8ljdwjyq  于 2022-11-14  发布在  其他
关注(0)|答案(1)|浏览(139)

**家庭作业问题:**当程序试图加密[“c”,“o”,“d”,“e”,“c”,“a”,“d”,“e”,“m”,“y”]中的“y”时,它在字母表中找到了它的索引,24。

但是当它查找右边3个空格的字母,也就是字母表[27]时,它抛出了一个错误,因为字母表只有26个元素!它“超出了范围”。
为了解决这个问题,我们可以使用余数运算符“环绕”字母表:%.
在替换消息中当前字符的行上,将字母表[j+3]更改为字母表[(j+3)%26]。
现在新的字母位置永远不会超过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]{

      message[h] = alphabet[(a+3)%26]

      break

    }
  }
}
wb1gzix0

wb1gzix01#

首先,你需要知道这里的%在数学上的意思。
在计算中,模运算返回一个数除以另一个数后的余数或有符号余数(称为运算的模)。
示例:5 % 2 = 1(因为5 mod 2 = 1的余数)
在这里你使用% 26,这意味着它永远不会超过26,总是得到余数,总是〈26。除此之外,你的数组只有26个值,索引为0->25
把它们结合起来,这就是你的问题out of range得到解决的原因。

相关问题