课外天地 李树青学习天地清心茶舍 → 李老师,看一下上机编的程序,为什么调换顺序,结果就不一样


  共有23074人关注过本帖树形打印复制链接

主题:李老师,看一下上机编的程序,为什么调换顺序,结果就不一样

美女呀,离线,留言给我吧!
eva
  1楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:43 积分:2049 威望:0 精华:0 注册:2006/9/18 17:29:55
李老师,看一下上机编的程序,为什么调换顺序,结果就不一样  发帖心情 Post By:2007/4/3 18:46:18 [只看该作者]

李老师:

这是add函数的代码:

public void add(int a,int b,int c)
         {
          second=(second+c)%60;
          minute=(minute+b+((second+c)/60))%60;
          hour=(hour+a+((minute+b)/60))%60;
          }

最后输出结果是 02:09:43PM,这个答案不正确。

但是我把顺序调换一下:

public void add(int a,int b,int c)
        {
        
          hour=(hour+a+((minute+b)/60))%60;
           minute=(minute+b+((second+c)/60))%60;
           second=(second+c)%60;
          
        }

输出结果是: 02:08:43PM,这个答案是正确的。

这是为什么,只是把代码的顺序换了一下。

[此贴子已经被admin于2010-12-13 19:52:23编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
admin
  2楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 管理员
等级:管理员 帖子:1945 积分:26736 威望:0 精华:34 注册:2003/12/30 16:34:32
回复  发帖心情 Post By:2007/4/4 7:54:31 [只看该作者]

在你的第一种代码中,你是先改变second变量的值,然后在据此改变minute,而minute需要second原先的值才能得到正确结果

second=(second+c)%60;
minute=(minute+b+((second+c)/60))%60;

[此贴子已经被作者于2010-12-13 19:52:42编辑过]

 回到顶部
美女呀,离线,留言给我吧!
eva
  3楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:43 积分:2049 威望:0 精华:0 注册:2006/9/18 17:29:55
  发帖心情 Post By:2007/4/4 20:32:13 [只看该作者]

老师:我感觉在第一种代码应该没错阿。

算法是累加:Time t1=new Time(13,2,3);

                      t.add(200,300,400);

我先用1.(400+3)/60=6分,  (400+3)%60=43秒;

           2.(300+2+6)/60=5小时, (300+2+6)%60=8分;

           3.(200+13+5)%24=2; 所以是02:08:43

所以这个代码

public void add(int a,int b,int c)
         {
          second=(second+c)%60;
          minute=(minute+b+((second+c)/60))%60;
          hour=(hour+a+((minute+b)/60))%24;
          }

算出来应该和我前面推算的结果一样啊,但是为什么不一样呢?

还有你上面说的我不太明白。

[此贴子已经被admin于2010-12-13 19:53:00编辑过]

 回到顶部
美女呀,离线,留言给我吧!
eva
  4楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游民 帖子:43 积分:2049 威望:0 精华:0 注册:2006/9/18 17:29:55
  发帖心情 Post By:2007/4/4 20:36:29 [只看该作者]

哦,老师我明白了,我把代码改称这样:

public void add(int a,int b,int c)
         {
          int t=second+c;
          second=(second+c)%60;
          int  s=minute+b;
          minute=(minute+b+((t)/60))%60;
          hour=(hour+a+((s)/60))%24;
          }

这样结果就对了。

老师,这个代码正确吗?


 

[此贴子已经被admin于2010-12-13 19:53:14编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
admin
  5楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 管理员
等级:管理员 帖子:1945 积分:26736 威望:0 精华:34 注册:2003/12/30 16:34:32
回复  发帖心情 Post By:2007/4/4 23:11:06 [只看该作者]

建议试验验证


 回到顶部