2016-06-16 18 views
-5

to_chr函數應該返回加密數組,但轉換爲字符。我已經嘗試了很多東西,並將那些不起作用的東西評論出來。將數組數組轉換爲字符ruby

class Encrypt 
    def initialize(code, string) 
    @code = code 
    @string = string 
    @encrypted = [] 
    end 

    def to_byte 
    @string.each_byte do |c| 
     @encrypted.push(c + @code) 
    end 
    print @encrypted 
    end 

    def to_chr 
    n = @encrypted.length 
    # n.times do |i| 
    # @encrypted.push(i.chr) 
    # end 
    print @encrypted[0].chr 

    # @encrypted.each do |x| 
    # @encrypted.push(x.chr) 
    # end 
    # print @encrypted 
    end 
end 

goop = Encrypt.new(2, "hello") 
goop.to_chr 
#=> in `to_chr': undefined method `chr' for nil:NilClass (NoMethodError) 
+0

@Stefan [這](https://github.com/Evan-Peterson/Encryption)是鏈接到GitHub repo,to_chr函數應該返回加密數組,但轉換爲字符。 –

+1

那麼當你運行代碼時GitHub'@ encrypted'是空的,你實際上並沒有給它分配任何東西......所以也許從這開始(做'goop.to_byte'來填充數組)我也推薦'puts'而不是'print' –

回答

0

創建Encrypted方法的實例,但設置@code = 2@string = "Hello"@encrypted = []。所以如果你撥打@encrypted[0],ruby會返回nil

所以,你可以修改你的類是這樣的:

class Encrypt 
    def initialize(code, string) 
    @code, @string, @encrypted = code, string, [] 
    end 

    def to_byte 
    @string.each_byte { |c| @encrypted << c + @code } 
    end 

    def to_chr 
    to_byte if @encrypted.empty? 

    @encrypted.map(&:chr) 
    end 
end 

goop = Encrypt.new(2, "hello") 
p goop.to_chr 
# => ["j", "g", "n", "n", "q"] 

我希望這有助於

0
def to_chr 
    @encrypted.each do |i| 
     print i.chr 
    end 
    print "\n" 
end 

確保調用to_byte之前to_chr

goop = Encrypt.new(2, "hello") 
goop.to_byte 
goop.to_chr 

回報:

jgnnq

+0

'puts @ encrypted.map(&:chr)'看起來不那麼貪婪。 – mudasobwa

+0

@mudasobwa在單獨的行上打印每個字符。你可以'加入'它們或者使用'pack',而不是'puts @ encrypted.pack'('c *')' – Stefan

+0

對,通常你會將值存儲在其他地方並且不打印它們。我同意'puts'比'print'更好,但是我沒有真正擔心這個問題。 –