无法将String转换为Integer(TypeError)

时间:2013-10-23 17:11:10

标签: ruby

我正在学习Ruby 我正在尝试创建一个简单的脚本,将给定的数字转换为罗马数字(旧式罗马数字)

我无法理解为什么我得到“无法将String转换为整数(TypeError)”

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,我希望在进入下一步时能得到一些支持。

非常感谢!

1 个答案:

答案 0 :(得分: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'],这可能更令人困惑于调试!