在标题中,我需要帮助理解有关计算两个起始年之间的闰年的问题,当从命令行执行程序时,无论输入如何,我总是会收到相同的输出。
我的代码如下:
while true
puts 'Input starting year:'
year_1 = gets.chomp
num_year_1 = year_1.to_i
puts 'Input second year:'
year_2 = gets.chomp
num_year_2 = year_1.to_i
puts 'These are the leap years between these two years:'
if num_year_1 > num_year_2
while num_year_1 >= num_year_2
if num_year_1 % 4 == 0 && num_year_1 % 100 == 0
puts num_year_1
end
num_year_1 -= num_year_1 - 1
end
elsif num_year_2 > num_year_1
while num_year_2 >= num_year_1
if num_year_2 % 4 == 0 && num_year_2 % 100 == 0
puts num_year_2
end
num_year_2 -= 1
end
elsif num_year_1 == num_year_2
puts 'These 2 years are the same, please try again.'
end
if year_1 == 'end'
break
end
end
我总是收到这个作为输出:
These are the leap years between these 2 years:
These 2 years are the same, try again
影响这一点的唯一输入是' end'命令,它使用相同的输出进行回复,但确实完成了循环中断。
我不明白为什么会这样,因为在我看来,我的程序有正确的ruby语法,所以非常感谢帮助。
答案 0 :(得分:3)
您现有的代码:
puts 'Input starting year:'
year_1 = gets.chomp
num_year_1 = year_1.to_i
puts 'Input second year:'
year_2 = gets.chomp
num_year_2 = year_1.to_i
应改为:
puts 'Input starting year:'
year_1 = gets.chomp
num_year_1 = year_1.to_i
puts 'Input second year:'
year_2 = gets.chomp
num_year_2 = year_2.to_i
问题是,您要将num_year_1
和num_year_2
分配给year_1.to_i
,而后者应分配给year_2.to_i
答案 1 :(得分:2)
更容易实现计算闰年的正确算法:
def isLeapYear(yearVar)
((yearVar % 4 == 0 && !(yearVar % 100 == 0)) || (yearVar % 400 == 0))
end
while true
puts 'Input starting year:'
num_year_1 = gets.to_i
puts 'Input second year:'
num_year_2 = gets.to_i
if num_year_1 < num_year_2
puts 'These are the leap years between these two years:'
for i in num_year_1..num_year_2
puts i if isLeapYear(i)
end
elsif num_year_1 == num_year_2
puts 'These two years are the same. Try again...'
else
puts 'Starting year must be less than second year. Try again...'
end
end
答案 2 :(得分:2)
您的第7行代码num_year_2 = year_1.to_i
有错字:我确定您打算放num_year_2 = year_2.to_i
。
答案 3 :(得分:1)
这是一个简洁的。
(start_year..end_year).each do |year|
next if year % 4 != 0
next if year % 100 == 0 && year % 400 != 0
puts year
end