22

我试图从 Chris Pine 的“Learn to Program”一书中回答以下问题:

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

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

闰年.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
4

2 回答 2

30

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

于 2013-12-03T16:38:09.117 回答
6

这是因为输入 fromgets.chomp是 a String。您不能%对 a 执行模 ( ) 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

这现在行得通吗?

于 2013-12-03T16:38:18.193 回答