Rss & SiteMap

课外天地 李树青 http://www.njcie.com

李树青 论坛 南京 财经 课外天地
共5 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

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

1楼
eva 发表于: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编辑过]
2楼
admin 发表于: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编辑过]
3楼
eva 发表于: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编辑过]
4楼
eva 发表于: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编辑过]
5楼
admin 发表于:2007/4/4 23:11:06

建议试验验证

共5 条记录, 每页显示 10 条, 页签: [1]

Copyright ©2002 - 2016 课外天地.Net
Powered By Dvbbs Version 8.3.0
Processed in .03125 s, 2 queries.