}
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;
}
}