程序设计就跟我们平时头脑想的是一样的[如何按生日的年月日计算年龄(周岁)]

程序设计就跟我们平时头脑想的是一样的,只需要解读我们平常是怎样按顺序进行计算的,然后转换成程序语句就可以了,所以设计程序不是压力很大。下面打个比方:如何按生日的年月日计算年龄(周岁)

我们头脑是怎样计算和判断的呢,如果我们就像放慢动作一样仔细解读每一步计算动作,可得:1、计算年差,2、计算月差,3、计算日差,如果愿意我们还可以计算时分差,也就是说我们实际上是把时间分开的,这样我们就得到首先要写的程序语句是:

int 实岁 = 预测日期.Year - 生日.Year, 月差 = 预测日期.Month - 生日.Month, 日差 = 预测日期.Day - 生日.Day, 时差 = 预测日期.Hour - 生日.Hour, 分差 = 预测日期.Minute - 生日.Minute;

接着我们怎样进行计算及逻辑是怎样的呢,就跟我们平常脑子中的计算步骤和逻辑是一样的,我们首先计算的是从出生的年到计算的年之间的差值,于是写程序语句:

实岁 = 预测日期.Year - 生日.Year,

紧接着计算和判断出生月到计算月的差值,如果计算月未到出生月则实岁应-1岁,于是写程序语句:

if (月差 < 0) { 实岁--; },

跟我们平时头脑计算一样,如果月等于或大于就不-1岁;

紧接着计算和判断出生月中的日差值,如果月相等那么计算日是否相等或大于,于是写程序语句:

if (月差 == 0 && 日差 < 0) { 实岁--; }

这里面条件的设定还包含了假设超过出生月则日子不需计算;

一般写到这里就足够了,不过事物总是在不断变化和演进的,或许某些需要计算时分差,那么,计算和判断怎么写呢?其实顺序和逻辑是一样的,不过有时候心不细分析也会产生逻辑上的错误,比如直接就判断时分差值:

if (日差 == 0 && 时差 < 0) { 实岁--; } 
if (日差 == 0 && 时差 == 0 && 分差 < 0) { 实岁--; }

这样写是不正确的,为什么呢?因为每月中都有此日、此时、此分,正确应该加上:月差 == 0 && 这样的判断;

之所以强调这点就是因为有时候写程序语句不细心分析会犯逻辑上的错误,而造成疑惑、困顿、烦恼,其实,只要细心分析就能发现问题。

于是我们得到下面正确的程序语句集合:

private int 实岁(DateTime 生日, DateTime 预测日期)
        {
            int 实岁 = 预测日期.Year - 生日.Year, 月差 = 预测日期.Month - 生日.Month, 日差 = 预测日期.Day - 生日.Day, 时差 = 预测日期.Hour - 生日.Hour, 分差 = 预测日期.Minute - 生日.Minute;
            if (月差 < 0) { 实岁--; } 
            if (月差 == 0 && 日差 < 0) { 实岁--; }
            if (月差 == 0 && 日差 == 0 && 时差 < 0) { 实岁--; }
            if (月差 == 0 && 日差 == 0 && 时差 == 0 && 分差 < 0) { 实岁--; }
            return 实岁;
        } 

调用:

int 岁数 = 实岁("1965-4-14 0:00:00", "2012-5-25 9:25:25");

以上我们发现可以归纳雷同的语句,如把多处的月差 == 0做个归纳,就可以改成如下:

if (月差 == 0)
{
   if(日差 < 0) { 实岁--; } 
   if (日差 == 0 && 时差 < 0) { 实岁--; }
   if (日差 == 0 && 时差 == 0 && 分差 < 0) { 实岁--; }
}

这样逻辑和语句看起来是不是很舒服!再归纳就不赘述了;这样写起程序来就跟我们平时的思路习惯很接近,会觉得很通顺、流畅、随心所欲,所以,写程序压力不是很大的。

当然每个人的思维逻辑有不同,另一种思维是这样的:

依据思维逻辑习惯直接写:

if (月差 == 0)
{
   ......
}

而我则习惯于先写好再归纳,比较轻松和顺着自己思维,不会搅乱脑筋,呵呵。。。。。,今天凭着思路就写了这些,知道写得不好,看了莫笑。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值