"Chào, Amigo!
"Chào Ellie."
"Bạn đã nghiên cứu về các vòng lặp, và điều đó thật tuyệt."
"Tôi đồng ý! Bây giờ tôi hoàn toàn không biết làm thế nào để sống mà không có họ."
"Đôi khi bạn có thể làm mà không cần chúng... Nhưng thường thì bạn sẽ cần đến chúng. Hôm nay chúng ta sẽ nói về tình huống khi bạn cần thoát khỏi vòng lặp trước thời hạn."
"Ý bạn là, khi điều kiện để tiếp tục vòng lặp là đúng, nhưng bạn vẫn cần thoát khỏi vòng lặp?"
"Chính xác! Đôi khi bạn có vẻ giống như bạn đã là một lập trình viên. Dù sao đi nữa, để thoát khỏi vòng lặp trước thời hạn, bạn có thể sử dụng câu lệnh break . Hãy xem ví dụ sau:
Mã số | Giải trình |
---|---|
|
Chương trình sẽ đọc một dòng từ bàn phím, cho đến khi bạn nhập "exit" . |
"Tôi hiểu rồi. Chương trình đọc các dòng từ bảng điều khiển. Nếu bạn nhập "exit"
, thì isExit
biến trở thành true
, điều kiện vòng lặp sẽ là , và vòng lặp sẽ kết thúc."!isExit
false
"Đúng vậy. Vì vậy, Java có một break
câu lệnh đặc biệt cho phép bạn đơn giản hóa logic như vậy. Nếu một break
câu lệnh được thực thi bên trong một vòng lặp, thì vòng lặp đó sẽ kết thúc ngay lập tức. Chương trình sẽ bắt đầu thực hiện câu lệnh theo sau vòng lặp. Câu lệnh rất ngắn gọn :
break;
"Đây là cách bạn có thể sử dụng break
câu lệnh để viết lại ví dụ mà chúng ta vừa thảo luận:
Mã số | Giải trình |
---|---|
|
Chương trình sẽ đọc một dòng từ bàn phím, cho đến khi bạn nhập "exit" . |
"Có lẽ tôi sẽ nhớ điều đó. Tôi cảm thấy nó sẽ có ích."
"Nhưng break
không phải câu lệnh Java duy nhất cho phép bạn kiểm soát hành vi của vòng lặp. Java cũng có câu continue
lệnh đó. Nếu bạn thực thi một continue
câu lệnh bên trong vòng lặp, thì lần lặp lại hiện tại của vòng lặp sẽ kết thúc trước thời hạn."
"Ý bạn là gì khi lặp đi lặp lại?"
"Lặp lại vòng lặp là một lần thực hiện phần thân vòng lặp. continue
Câu lệnh ngắt phần lặp lại hiện tại của vòng lặp, nhưng không giống như break
câu lệnh, nó không tự kết thúc vòng lặp. Câu lệnh cũng ngắn gọn:
continue;
"Vì vậy, continue
câu lệnh có thể được sử dụng trong một vòng lặp nếu chúng ta muốn 'bỏ qua' việc thực thi một số lần lặp nhất định của vòng lặp?"
"Chính xác. Bạn có hiểu sự khác biệt giữa break
và không continue
? Nếu bạn cần tìm bảy trong số 20 chữ số không lặp lại, bạn sẽ sử dụng loại câu lệnh ngắt vòng lặp và vòng lặp nào?
"Hmm... Tôi sẽ xem qua tất cả các số, và nếu tôi tìm thấy 7, thì tôi sẽ thực hiện lệnh break
."
"Điều gì sẽ xảy ra nếu bạn cần hiển thị các số từ đến 1
ngoại 20
trừ các số chia hết cho 7
?"
"Chà, ở đây có lẽ tôi cần continue
, vì tôi không muốn thoát khỏi vòng lặp. Nhưng tôi vẫn chưa hiểu lắm."
"Để tôi chỉ cho bạn cách giải quyết vấn đề này. Mã này có thể trông như thế nào."
Mã số | Giải trình |
---|---|
|
Chương trình hiển thị các số từ 1 đến 20 . Nếu số đó chia hết cho 7 (dư chia cho 7 là 0 ), thì chúng ta bỏ qua việc hiển thị số. |
"Sao em lại nhìn anh nghi ngờ thế, Ellie? Có mưu đồ gì ở đây không?"
"Bạn không thể bị lừa, Amigo! Thật vậy, mã này sẽ không hoạt động chính xác . Nó sẽ hiển thị 6 chữ số đầu tiên, và sau đó i
sẽ mãi mãi bị mắc kẹt trên con số đó 7
. Rốt cuộc, continue
câu lệnh bỏ qua hai câu lệnh khác: System.out.println(i)
và i++
. Như kết quả là khi chúng ta đạt đến giá trị 7
, biến i
sẽ ngừng thay đổi và chúng ta sẽ ở trong một vòng lặp vô hạn. Tôi viết mã theo cách này nhằm mục đích minh họa một lỗi rất phổ biến."
"Làm thế nào để chúng tôi sửa chữa nó?"
"Có hai lựa chọn ở đây:"
Tùy chọn 1: thay đổi i
trước khi thực hiện continue
, nhưng saui % 7
Tùy chọn 2: luôn tăng dần i
ở đầu vòng lặp. Nhưng i
giá trị bắt đầu của sau đó phải là 0
.
lựa chọn 1 | Lựa chọn 2 |
---|---|
|
|
"Tuyệt vời! Tôi sẽ cố gắng không phạm sai lầm này."
"Em sẽ nhớ lời hứa của anh!"