60! S giây,
ố
second, là hàng đ n v , s phút,
ơ
ị ố
minute, là hàng 60, còn s gi ,
ố ờ hour, là hàng 3600.
Khi ta vi t
ế addTime và increment, th c ch t là ta đang tính c ng h 60; đó là lý do t i sao ta ph i
ự
ấ
ộ
ở ệ
ạ
ả
“nh ” t hàng này sang hàng khác.
ớ ừ
M t cách ti p c n khác đ i v i t ng th bài toán là chuy n
ộ
ế ậ
ố ớ ổ
ể
ể Time thành double r i l i d ng kh năng
ồ ợ ụ
ả
tính toán c a máy đ i v i
ủ
ố ớ double. Sau đây là m t ph ng th c chuy n đ i
ộ
ươ
ứ
ể
ổ Time thành double:
public static double
convertToSeconds(Time t) {
int
minutes = t.hour * 60 + t.minute;
double
seconds = minutes * 60 + t.second;
return
seconds;
}
Bây gi t t c nh ng gì ta c n là cách chuy n t
ờ ấ ả
ữ
ầ
ể ừ double sang đ i t ng
ố ượ Time. Ta có th vi t m t ph ng
ể ế
ộ
ươ
th c đ th c hi n đi u này, song có l h p lý h n la vi t m t constructor th ba:
ứ ể ự
ệ
ề
ẽ ợ
ơ
ế
ộ
ứ
public
Time(
double
secs) {
this
.hour =(
int
)(secs / 3600.0);
secs -=
this
.hour * 3600.0;
this
.minute =(
int
)(secs / 60.0);
secs -=
this
.minute * 60;
this
.second = secs;
}
Constructor này h i khác nh ng constructor khác; nó bao g m nh ng tính toán bên c nh phép gán cho
ơ
ữ
ồ
ữ
ạ
các bi n th c th .
ế
ự
ể
Có th b n ph i suy nghĩ đ t thuy t ph c b n thân r ng kĩ thu t mà tôi dùng đ chuy n t h c s
ể ạ
ả
ể ự
ế
ụ ả
ằ
ậ
ể
ể ừ ệ ơ ố
này sang c s kia là đúng. Nh ng m t khi b n đã b thuy t ph c r i, ta có th dùng nh ng ph
ng th c
ơ ố
ư
ộ
ạ
ị
ế
ụ ồ
ể
ữ
ươ
ứ
này đ vi t l i
ể ế ạ addTime:
public static
Time addTime(Time t1, Time t2) {
double
seconds = convertToSeconds(t1) + convertToSeconds(t2);
return new
Time(seconds);
}
Mã l nh trên ng n h n phiên b n g c, và d th y h n h n r ng mã l nh này đúng đ n (v i gi thi t
ệ
ắ
ơ
ả
ố
ễ ấ
ơ
ẳ ằ
ệ
ắ
ớ
ả
ế
th
ng l r ng nh ng ph
ng th c nó kích ho t cũng đ u đúng). Vi c vi t l i
ườ
ệ ằ
ữ
ươ
ứ
ạ
ề
ệ
ế ạ increment theo cách
t
ng t đ
c dành cho b n nh m t bài t p.
ươ
ự ượ
ạ
ư ộ
ậ
11.12 Khái quát hóa
Trong ch ng m c nào đó, vi c chuy n đ i qua l i gi a các h c s 60 và 10 khó h n vi c x lý th i gian
ừ
ự
ệ
ể
ổ
ạ
ữ
ệ ơ ố
ơ
ệ ử
ờ
đ n thu n. Vi c chuy n h c s thì tr u t
ng h n, còn tr c giác c a ta x lý th i gian t t h n.
ơ
ầ
ệ
ể
ệ ơ ố
ừ ượ
ơ
ự
ủ
ử
ờ
ố ơ
Nh ng n u ta có hi u bi t sâu đ coi th i gian nh các s trong h 60, và đ u t công s c vi t nh ng
ư
ế
ể
ế
ể
ờ
ư
ố
ệ
ầ ư
ứ
ế
ữ
ph
ng th c chuy n đ i
ươ
ứ
ể
ổ (convertToSeconds và constructor th ba), ta s thu đ c m t ch ng trình
ứ
ẽ
ượ
ộ
ươ
ng n h n, d đ c và g l i, đ ng th i đáng tin c y h n.
ắ
ơ
ễ ọ
ỡ ỗ
ồ
ờ
ậ
ơ
Vi c b sung các đ c tính sau này cũng d dàng h n. Hãy t
ng t
ng ta c n tr hai đ i t
ng
ệ ổ
ặ
ễ
ơ
ưở
ượ
ầ
ừ
ố ượ Time đ
ể