首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby不隐式地将Fixnum转换为字符串(TypeError)

Ruby不隐式地将Fixnum转换为字符串(TypeError)
EN

Stack Overflow用户
提问于 2013-12-04 00:34:12
回答 2查看 49.6K关注 0票数 22

我正在尝试回答Chris Pine的“学习编程”一书中的以下问题:

Leap几年。写一个程序,询问开始年和结束年,然后将所有的闰年放在它们之间(如果它们也是闰年,还要包括它们)。闰年是被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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-04 00:38:09

向您的gets.chomp调用添加一个.to_i。您正在尝试对文本进行数学运算。当从控制台输入时,所有内容都以文本开始,即使是看起来像数字的文本。

票数 30
EN

Stack Overflow用户

发布于 2013-12-04 00:38:18

这是因为来自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

现在能用了吗?

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20356609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档