2016-03-27 31 views
-1

我有這樣的代碼:未定義的方法長度和下一個!對於零: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,但沒有運氣。有人能指引我朝着正確的方向嗎?

+1

你期待加密時取出的情況下或在這些演習的情況下被刪除保存它(通常是由於我們的目標是不涵蓋所有可能的字符,只是爲了讓你思考處理字符串)?另外,請考慮在解密例程中爲變量使用描述性名稱,而不是像顏色這樣的任意名稱 - 使用像您這樣的名稱來執行加密例程,這是一般的良好實踐,並且對於其他人閱讀您的代碼非常重要,因爲它加快了對它應該做什麼。 –

回答

1

在這兩種情況下,你alphabeth應包括小寫downcase CARACTERES:

字母= 「abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ」

與您的代碼另一個問題是,不是打印的CARACTERES,我建議你返回一個值:

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 
+1

現在你已經完成了所有的例程,你需要修改新字母表的elsif字母==「z」例程(如果輸入是「Z」,輸出將是「AA」,它不會解密回到「Z」) –

+0

@NeilSlater明白了......讓我看看如何處理 – psantos

+0

@NeilSlater現在呢? – psantos

相關問題