红宝石中的Ceasars Cipher

时间:2017-08-20 11:54:50

标签: ruby

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次。我想了很久但我不明白...... 谢谢你的回答。

1 个答案:

答案 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