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

}

return

sum;

}

M c dù cách này đúng, song ch

ng trình b t đ u dài dòng. Sau này tôi s g i ý m t gi i pháp khác

ươ

ắ ầ

ẽ ợ

ng n h n nhi u.

ơ

Đo n mã l nh trên gi i thi u hai toán t mà ta ch a t ng g p,

ư ừ

ặ += và -=. Nh ng toán t này cho ta vi t

ế

ng n g n l nh tăng ho c gi m bi n. Chúng cũng g n gi ng nh

ọ ệ

ế

ư ++ và --, ch khác ch (1) chúng làm

ở ỗ

vi c đ

c c v i

ệ ượ ả ớ double l n

ẫ int, và (2) l ng tăng ho c gi m không nh t thi t b ng 1. Câu

ượ

ế ằ

l nh

ệ sum.second -= 60.0; t ng đ ng v i

ươ

ươ

ớ sum.second = sum.second - 60;

11.9 Ph

ng th c s a đ i

ươ

ứ ử

Xét m t ví d v ph

ng th c s a đ i, ph

ng th c

ụ ề

ươ

ứ ử

ươ

ứ increment, nh m tăng thêm m t s giây cho tr c

ộ ố

ướ

vào m t đ i t

ng

ộ ố ượ Time. M t l n n a, ta có b n nháp ph ng th c này nh sau:

ộ ầ

ươ

ư

public static void

increment(Time time,

double

secs) {

time.second += secs;

if

(time.second >= 60.0) {

time.second -= 60.0;

time.minute += 1;

}

if

(time.minute >= 60) {

time.minute -= 60;

time.hour += 1;

}

}

Dòng đ u tiên th c hi n thao tác c b n; nh ng dòng còn l i đ x lý các tr

ng h p ta đã xét.

ơ ả

ạ ể ử

ườ

Li u ph

ng th c này có đúng không? Đi u gì s x y ra n u đ i s

ươ

ẽ ả

ế

ố ố secs l n h n nhi u so v i 60? Trong

ơ

tr

ng h p nh v y, tr đi 60 m t l n là ch a đ ; ta ph i ti p t c tr đ n khi

ườ

ư ậ

ộ ầ

ư

ả ế ụ

ừ ế

second nh h n 60. Ta có

ỏ ơ

th làm đi u này b ng cách thay các l nh

ệ if b ng các l nh

ệ while:

public static void

increment(Time time,

double

secs) {

time.second += secs;

while

(time.second >= 60.0) {

time.second -= 60.0;

time.minute += 1;

}

while

(time.minute >= 60) {

time.minute -= 60;

time.hour += 1;

}

}