为什么在for循环中不能将i作为index方法的参数使用
解密代码问题修复
错误根因
待解密的字符串包含空格字符,你定义的alphabet数组中未收录空格,调用alphabet.index(i)查找空格索引时会返回nil,nil无法参与数值运算,因此抛出异常。
修复方案
方案1:调整字母表适配所有字符
在字母表中增加空格元素,同步修改模运算的除数即可:
message = "rvtufkmbrdpr fmasmegppreemvemeuaiv tmgb" messageArray = message.chars decrypted = "" # 末尾新增空格元素,总长度变为28 alphabet = ["","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"," "] for i in(messageArray) letter = alphabet[((alphabet.index(i)) + 14) % 28] decrypted += letter end puts decrypted
方案2:单独处理空格字符
无需修改原有字母表逻辑,碰到空格直接跳过位移步骤,原样保留即可:
message = "rvtufkmbrdpr fmasmegppreemvemeuaiv tmgb" messageArray = message.chars decrypted = "" alphabet = ["","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"] for i in(messageArray) if i == " " decrypted += " " next end letter = alphabet[((alphabet.index(i)) + 14) % 27] decrypted += letter end puts decrypted
两种方案都可以解决index方法调用报错的问题,运行后可正常输出解密后的字符串。
内容的提问来源于stack exchange,提问作者Hugo Salcedo
相关产品推荐
相关产品推荐

