2016-03-27 18 views
-1

私はこのコードを持っている:私は、のように大文字追加する場合未定義のメソッド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")) 

は、それは私がそれを引数にスペースを有することに起因すると思った、そのためif/else、ない幸運を追加

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

返します。誰かが私を正しい方向に向けることができますか?両方のケースで

+1

あなたはちょうどあなたがについて考えてもらうために、暗号化するときにケースを削除するか、目標はすべての可能な文字を網羅するものではないので、ケースが除去されたこれらの演習では、通常、(それを維持するために期待しています文字列を扱う)?また、色などの任意の名前ではなく、暗号化ルーチンで変数にわかりやすい名前を使用することを検討してください。暗号化ルーチンのような名前を使用することは一般的には良い方法であり、それは何をすることになっています。 –

答えて

1

あなたalphabethは caracteres downcase 小文字を含める必要があります。

アルファベット= "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

あなたのコードで

他の問題は、代わりにcaracteresを印刷して、I値を返すようお勧めします:

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 letter ==" z "ルーチンを修正する必要があります(入力が" Z "の場合、出力は" AA "になります。 "Z") –

+0

@NeilSlaterはそれを手に入れました...この処理方法を教えてください – psantos

+0

@NeilSlater今はどうですか? – psantos

関連する問題