2013-10-23 54 views
0

我学习Ruby 我想创建一个简单的脚本,将一个给定的数字为罗马数字(旧风格的罗马数字)不能把字符串转换成整数(类型错误)

我无法理解转换为什么我得到了“不能把字符串转换成整数(类型错误)”

def convert_to_roman number 
    romans_array = [[1000,'M'],[500,'D'],[100,'C'],[50,'L'],[10,'X'],[5,'V'][1,'I']] 
    converted_array = [] 

    romans_array.each do |rom_num| 
    num = rom_num[0] 
    letter = rom_num[1] 

    if number > num 
     times = number/num 
     roman_letter = letter*times 
     converted_array.push(roman_letter) 
     number = number % num 
    end 
    end 
    converted_array.join() 
end 

number = '' 
puts 'please write a number and I will convert it to old style Roman numerals :)' 
puts 'p.s. to exit this program simply hit enter on an empty line, or type 0 and enter :)' 

while number != 0 
    number = gets.chomp.to_i 
    puts convert_to_roman number 
end 

我的代码是: https://github.com/stefanonyn/ruby-excercises/blob/master/roman_numerals.rb

你会看到,在文件的结尾注释掉有一个老的修订代码,它实际上工作但有很多重复。

如果有人能澄清我为什么会得到上述错误,我将不胜感激。 请不要为我写代码,我正在努力学习Ruby,我将不胜感激只是在转移到下一步的一些支持。

非常感谢!

回答

2

你是你的阵列

romans_array = [[1000,'M'],[500,'D'],[100,'C'],[50,'L'],[10,'X'],[5,'V'][1,'I']] 
                     ^here 

这个错误绝对不是所有的帮助,但它出现的原因是,在解释它看起来像你试图访问一个范围内缺少一个逗号最后一个元素[5,'V']数组中的索引。然而,提供的索引从1到'I'当然没有意义。如果它已被写入[5,'V'][1,1],则数组的最后一个元素将为['V'],这可能更难以调试!

+0

哦哇,谢谢! :) – superuseroi

相关问题