未定义的方法length和next!对于nil:NilClass



我有这个代码:

def encrypt(x)
  index = 0
  alphabet = "abcdefghijklmnopqrstuvwxyz"
  while index < x.length
    letter = x[index]
    if letter == ' '
      print ' '
      index += 1
    elsif letter == "z"
      print "a"
      index += 1
    else
      letter = alphabet[letter].next!
      index += 1
      print letter
    end
  end
end
def decrypt(x)
  number = 0
  alphabet = "abcdefghijklmnopqrstuvwxyz"
  while number < x.length
    green = x[number]
    if green == ' '
      print ' '
      number += 1
    else
      red = alphabet.index(green)
      red = red.to_i
      blue = red - 1
      yellow = alphabet[blue]
      print yellow
      number += 1
    end
  end
end

如果我添加一个大写字母,例如:

encrypt("Dhd  d hd h")

它返回:

undefined method `next!' for nil:NilClass
(repl):13:in `encrypt'
(repl):39:in `initialize'

或者如果我尝试使用两种方法:

encrypt(decrypt("Dhddhdh"))

它返回

undefined method `length' for nil:NilClass
(repl):4:in `encrypt'
(repl):39:in `initialize'

我认为这是由于论点中有空格,并为此添加了if/else,但运气不佳。有人能给我指正确的方向吗?

在这两种情况下,您的字母白都应该包括小写下大写字符:

alphabet="abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

代码的另一个问题是,我建议您返回一个值:

def encrypt(x)
  index = 0
  encrypted = ""
  alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  while index < x.length
    letter = x[index]
    if letter == ' '
      encrypted << ' '
    elsif letter == "z"
       encrypted << "a"
    elsif letter == "Z"
      encrypted << "A"
    else
       letter = alphabet[letter].next!
       encrypted << letter
    end
    index += 1
  end
  encrypted
end

解密方法:

def decrypt(x)
 index = 0
  decrypted = ""
  alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  while index < x.length
    letter = x[index]
    if letter == ' '
      decrypted << ' '
    elsif letter == "A"
      decrypted << "Z"
    else
      blue = alphabet.index(letter) - 1
      decrypted << alphabet[blue]
    end
    index += 1
  end
  decrypted
end

相关内容