我是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)
你有一个一个一个错误.数组为0索引.singlenum.length在这种情况下你的是7,但在你的for循环中,你最多6,然后尝试引用singlenum[7]比较singlenum[6]. singlenum[7]是的nil,所以它不理解<运算符.
| 归档时间: |
|
| 查看次数: |
5803 次 |
| 最近记录: |