李老师:
这是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,这个答案是正确的。
这是为什么,只是把代码的顺序换了一下。
在你的第一种代码中,你是先改变second变量的值,然后在据此改变minute,而minute需要second原先的值才能得到正确结果
second=(second+c)%60;
minute=(minute+b+((second+c)/60))%60;
老师:我感觉在第一种代码应该没错阿。
算法是累加: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;
}
算出来应该和我前面推算的结果一样啊,但是为什么不一样呢?
还有你上面说的我不太明白。
哦,老师我明白了,我把代码改称这样:
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;
}
这样结果就对了。
老师,这个代码正确吗?
建议试验验证