Ruby没有将Fixnum隐式转换为String(TypeError)

时间:2013-12-03 16:34:12

标签: ruby fixnum

我试图回答克里斯派恩的“学习编程”一书中的以下问题:

  

闰年。编写一个程序,要求开始年份和结束年份,然后将所有闰年放在它们之间(如果它们也是闰年,则包括它们)。闰年是可被4整除的年份(如1984年和2004年)。然而,被100整除的年份不是闰年(例如1800和1900),除非它们也可以被400整除(例如1600和2000,实际上是闰年)。真糟糕!

运行代码时出现以下错误:

leap_year.rb:12:in +': no implicit conversion of Fixnum into String (TypeError) from leap_year.rb:12:in'

这是我的代码:

#leap years

puts 'What is the starting year?'
starting_year = gets.chomp
puts 'What is the ending year?'
ending_year = gets.chomp

while starting_year <= ending_year
  if starting_year%4 == 0 && (starting_year%100 != 0 && starting_year%400 == 0)
    puts starting_year 
  end 
  starting_year+=1
end

2 个答案:

答案 0 :(得分:28)

gets.chomp来电中添加.to_i。你正试图对文本进行数学运算。当从控制台输入时,一切都以文本开头,即使它是数字文本。

答案 1 :(得分:6)

这是因为gets.chomp的输入是String。您无法在%上执行模数(String)。您需要先将其转换为整数。

试试这个......

puts 'What is the starting year?'
starting_year = gets.chomp.to_i
puts 'What is the ending year?'
ending_year = gets.chomp.to_i

while starting_year <= ending_year
  if starting_year%4 == 0 && (starting_year%100 != 0 && starting_year%400 == 0)
    puts starting_year 
  end 
  starting_year+=1
end

现在有效吗?