**家庭作业问题:**当程序试图加密[“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
}
}
}
1条答案
按热度按时间wb1gzix01#
首先,你需要知道这里的
%
在数学上的意思。在计算中,模运算返回一个数除以另一个数后的余数或有符号余数(称为运算的模)。
示例:
5 % 2 = 1
(因为5 mod 2 = 1
的余数)在这里你使用
% 26
,这意味着它永远不会超过26,总是得到余数,总是〈26。除此之外,你的数组只有26个值,索引为0->25
。把它们结合起来,这就是你的问题
out of range
得到解决的原因。