THINK JAVA: CÁCH SUY NGHĨ NHƯ NHÀ KHOA HỌC MÁY TÍNH - Trang 106

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 đ