计算两个预定年份之间的闰年

时间:2014-07-04 18:37:38

标签: ruby output

在标题中,我需要帮助理解有关计算两个起始年之间的闰年的问题,当从命令行执行程序时,无论输入如何,我总是会收到相同的输出。

我的代码如下:

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语法,所以非常感谢帮助。

4 个答案:

答案 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_1num_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