Ruby on rails 回顾我的闰年计划

Ruby on rails 回顾我的闰年计划,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在使用Chris Pine的教程学习ruby: 基本上,任务是编写闰年计划: 写一个程序,要求一个起始年和一个结束年,然后把所有的闰年放在它们之间(包括它们,如果它们也是闰年的话)。闰年是可以被四整除的年份(比如1984年和2004年)。然而,被100整除的年份不是闰年(比如1800年和1900年),除非它们被400整除(比如1600年和2000年,实际上是闰年) 以下是我编写的程序: puts "leap years program" puts "" puts "what is the s

我正在使用Chris Pine的教程学习ruby:

基本上,任务是编写闰年计划:

写一个程序,要求一个起始年和一个结束年,然后把所有的闰年放在它们之间(包括它们,如果它们也是闰年的话)。闰年是可以被四整除的年份(比如1984年和2004年)。然而,被100整除的年份不是闰年(比如1800年和1900年),除非它们被400整除(比如1600年和2000年,实际上是闰年)

以下是我编写的程序:

puts "leap years program"
puts ""
puts "what is the starting year?"
startYear = gets.to_i
puts "what is the ending year?"
while (endYear = gets.to_i) < startYear
    puts "ending year should be later than starting year, please re-input:"
end
while startYear < endYear
    while ((startYear % 4 == 0 and startYear % 100 != 0) or (startYear % 100 == 0 and startYear % 400 == 0))
        puts startYear.to_s
        startYear = startYear + 1       
    end
    startYear = startYear + 1
end
推出“闰年计划”
放置“”
提出“起始年是什么?”
startYear=get.to_i
提出“结束年份是什么?”
而(endYear=gets.to_i)
为什么我需要写两次
startYear=startYear+1
——一次在内部while循环中,一次在外部while循环中


此外,任何其他改进我的程序的指针和提示都将不胜感激。

您可以在内部while循环条件中添加条件'startYear@Jimmy:

按照编写程序的方式,如果不在内部循环中增加startYear,它将是一个无限循环。当你第一次发现闰年并进入你的内循环时,你永远不会退出它,因为内循环的条件总是正确的

如果您以startYear=2000输入内部循环,并且从未在该循环中增加它,那么您的输出将类似于:

2000年 2000 2000


因此,将startYear增加1,使其为2001,这会使内部循环条件失效。然后,在外循环中将startYear再次增加1,然后再根据内循环条件对其进行测试。这确保了您不会在同一年进行两次测试。

您使用的是一个内部循环,而您真正需要做的是在外部循环中每次迭代检查一次。因此,您可以尝试在循环中使用条件:

while startYear < endYear
    if (startYear % 4 == 0 and startYear % 100 != 0) or
        (startYear % 100 == 0 and startYear % 400 == 0)
       puts startYear.to_s     
    end
    startYear = startYear + 1
end
也许这样更好:

puts "leap years program".center(60)
puts ""
puts 'Please type a starting year: '
starting = gets.to_i
puts 'Please type a ending year: '
  while (ending = gets.to_i) < starting
puts 'ending year should be later than starting year, please re-input:'
  end
puts 'All leap years below:'
  while starting <= ending
    if (starting%100 != 0 and starting%4 == 0) or (starting%100 == 0 and starting%400 == 0)
      puts starting
    end
  starting = starting + 1
  end
put“闰年计划”。中心(60)
放置“”
输入“请键入起始年份:”
开始=到达
放入“请键入结束年份:”
当(结束=到达)开始时
puts'结束年份应晚于开始年份,请重新输入:'
结束
将“所有闰年都放在下面:”

在开始跟踪程序的执行时,用铅笔和纸跟踪值。为什么这里有两个嵌套循环?这应该是一个从开始到结束的循环,在这个循环中有一个if条件,它决定了当前年份是否是闰年。谢谢!我目前正在进行while循环,所以这个程序是为了练习。while循环中的if循环很有意义,idk为什么我之前没有想到这个-这似乎是最佳实践。你没有解释你改变了什么。这对新手没有帮助
puts "leap years program".center(60)
puts ""
puts 'Please type a starting year: '
starting = gets.to_i
puts 'Please type a ending year: '
  while (ending = gets.to_i) < starting
puts 'ending year should be later than starting year, please re-input:'
  end
puts 'All leap years below:'
  while starting <= ending
    if (starting%100 != 0 and starting%4 == 0) or (starting%100 == 0 and starting%400 == 0)
      puts starting
    end
  starting = starting + 1
  end