首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ruby中实现我自己的闰年类

在ruby中实现我自己的闰年类
EN

Stack Overflow用户
提问于 2015-07-02 11:40:01
回答 4查看 143关注 0票数 0

我在exercism.io上做了一些练习,对于当前的练习,我们需要实现我们自己的闰年类(忽略Ruby内置的特性)。测试是提供的,我很难让所有的测试都通过。

总之,闰年是任何可以被4整除的年份,除非该年可以被100整除,除非它也可以被400整除。到目前为止,我的情况如下:

代码语言:javascript
复制
class Year
  def self.leap?(year)
    if (year % 400 == 0 && year % 100 == 0) || (year % 100 != 0 && year % 4 == 0)
      return "Yes, #{year} is a leap year"
    else
      return "No, #{year} is not a leap year"
    end
  end
end

失败的是1900年、1997年和1998年的考试。这不是一个很大的文件,下面是测试装置:

代码语言:javascript
复制
class YearTest < Minitest::Test
  def test_leap_year
    assert Year.leap?(1996), 'Yes, 1996 is a leap year'
  end

  def test_non_leap_year
    refute Year.leap?(1997), 'No, 1997 is not a leap year'
  end

  def test_non_leap_even_year
    refute Year.leap?(1998), 'No, 1998 is not a leap year'
  end

  def test_century
    refute Year.leap?(1900), 'No, 1900 is not a leap year'
  end

  def test_fourth_century
    assert Year.leap?(2400), 'Yes, 2400 is a leap year'
  end
end

我不完全相信我的逻辑是合理的,所以任何帮助都将是非常感谢的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-07-02 11:59:41

问题是Year.leap?应该返回true或false,而不是根据您的测试返回字符串。

代码语言:javascript
复制
class Year
  def self.leap?(year)
    (year % 400 == 0 && year % 100 == 0) || (year % 100 != 0 && year % 4 == 0)
  end
end

你的测试现在就要通过了。

assert正在寻找一个真实的回应,refute正在寻找一个虚假的回应。

我们本可以把原始代码保留得更完整,但是说.

代码语言:javascript
复制
if (condition_to_test) == true
  return true
else
  return false
end

更简洁地呈现为

代码语言:javascript
复制
condition_to_test

它将酌情自动返回truefalse

票数 2
EN

Stack Overflow用户

发布于 2015-07-02 11:52:30

代码语言:javascript
复制
class Year
  def self.leap?(year)
    return "Yes, #{year} is a leap year" if (year % 400).zero?
    return "No, #{year} is not a leap year" if (year % 100).zero?
    return "Yes, #{year} is a leap year" if (year % 4).zero?
    return "No, #{year} is not a leap year"
  end
end

代码语言:javascript
复制
class Year
  def self.leap?(year)
    yes, no = "Yes, #{year} is a leap year", "No, #{year} is not a leap year"
    return yes if (year % 400).zero?
    return no if (year % 100).zero?
    return yes if (year % 4).zero?
    return no
  end
end
票数 3
EN

Stack Overflow用户

发布于 2015-07-02 11:50:58

按照您的描述,它应该如下所示

代码语言:javascript
复制
if year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)
  return "Yes, #{year} is a leap year"
else
  return "No, #{year} is not a leap year"
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31183631

复制
相关文章

相似问题

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