class CeasarsCipher
def initialize text
@text = text.split ''
end
def encrypt key
@text = @text.each do |letter|
key.times do
if letter != "z"
letter.next!
else
letter = "a"
end
end
end
end
def printCipher
puts @text
end
end
cipher = CeasarsCipher.new "abcdefghijklmnopqrstuvwxyz"
cipher.encrypt 2
cipher.printCipher
当我运行此代码时,我的输出是: C d Ë F G H 一世 Ĵ ķ 升 米 ñ Ø p q [R 小号 Ť ü v w ^ X ÿ ž ž ž
我不明白为什么会有z 3次。我想了很久但我不明白...... 谢谢你的回答。
答案 0 :(得分:1)
这是因为当您执行letter = "a"
时,您不会更改字符串,而是声明一个新变量。
以下是使用map
:
def encrypt key
@text.map! do |l|
key.times.reduce(l) do |l|
l == 'z' ? 'a' : l.next
end
end
end