【发布时间】:2017-02-14 18:38:55
【问题描述】:
这是我将用户输入的字符串转换为凯撒密码的代码。
puts "text?"
text = gets.chomp
puts "key?"
key = gets.chomp.to_i
plainTex = Array.new
ciphTex = Array.new
j = 0
text.each_byte do |i|
plainTex[j] = i
j += 1
end
j = 0
plainTex.each_entry do |i|
if ( i == 32 )
ciphTex[j] = plainTex[j]
j += 1
end
if( plainTex[j] > 64) and (plainTex[j] < 91 )
if( (plainTex[j] + key) > 91)
ciphTex[j] = (plainTex[j] + key ) - 90
j += 1
else
ciphTex[j] = plainTex[j] + key
j += 1
end
end
if( plainTex[j] > 94) and (plainTex[j] < 123)
if( (plainTex [j] + key) > 122)
ciphTex [j] = (plainTex[j] + key) - 122
j += 1
else
ciphTex[j] = plainTex[j] + key
j += 1
end
end
end
ciphTex.each_entry do |i|
puts i
end
现在,我遇到了错误: nil:NilClass (NoMethodError) 的未定义方法`>'
在网络上搜索让我得出结论,plainTex 可能是 nil,正如错误消息所说(这不应该是这种情况,因为 plainTex 是预先提供数据的)。
附带说明:当输入字符串全部为小写且没有空格时,程序运行良好。我不知道为什么。
那么,我做错了什么?
【问题讨论】:
-
好的起点是记下错误中的行号,这将有助于缩小范围。
-
第 26 行:if(plainTex[j] > 64) 和 (plainTex[j]
-
您调用的对象
>是nil。你在什么对象上调用>?提示:它不是plainTex。 -
这不是
plaintex的j'th元素吗?因为有plainTex[j] > 64的比较 -
@arun-that-plays-chess
plaintex[j]可能为零。调试器可能会有所帮助
标签: ruby