在`>'中:在Ruby中比较Fixnum和nil失败(ArgumentError)罗马数字转换器

Dai*_*isy 0 ruby

我是Ruby的新手,我正在尝试编写一个将罗马数字转换为数字的程序.

这是我到目前为止所做的:

roman_numbers = {"M" => 1000, "D" => 500, "C" => 100, "L" => 50, "X" => 10, "V" => 5, "I" => 1}
number_by_user = "MCMXCIX"
singlenum = number_by_user.split(//).reverse!

l = singlenum.length
result =0


result = roman_numbers[singlenum[0]]
puts result
for i in 0..l-1
  if roman_numbers.key?(singlenum[i])
    **if (roman_numbers[singlenum[i]] > roman_numbers[singlenum[i+1]])** #gives error
      result = result - roman_numbers[singlenum[i+1]]
    elsif (roman_numbers[singlenum[i]]== roman_numbers[singlenum[i+1]] || **roman_numbers[singlenum[i]] < roman_numbers[singlenum[i+1]])** #gives error
      result = result + roman_numbers[singlenum[i+1]]
    end
    puts roman_numbers[singlenum[i]]
  else
    puts "One of the values are not roman"
    break
  end  
end
puts "The number is: " , result
Run Code Online (Sandbox Code Playgroud)

但它给了我以下错误(请参阅注释行):

:in `>': comparison of Fixnum with nil failed (ArgumentError)
Run Code Online (Sandbox Code Playgroud)

Mar*_*bot 5

你有一个一个一个错误.数组为0索引.singlenum.length在这种情况下你的是7,但在你的for循环中,你最多6,然后尝试引用singlenum[7]比较singlenum[6]. singlenum[7]是的nil,所以它不理解<运算符.