"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
Scanner console = new Scanner(System.in);
boolean isExit = false;
while (!isExit)
{
   String s = console.nextLine();
   isExit = s.equals("exit");
}
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ì isExitbiế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."!isExitfalse

"Đúng vậy. Vì vậy, Java có một breakcâu lệnh đặc biệt cho phép bạn đơn giản hóa logic như vậy. Nếu một breakcâ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 breakcâ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
Scanner console = new Scanner(System.in);
while (true)
{
   String s = console.nextLine();
   if (s.equals("exit"))
     break;
}
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 breakkhô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 continuelệnh đó. Nếu bạn thực thi một continuecâ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. continueCâ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ư breakcâ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, continuecâ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 breakvà 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 1ngoại 20trừ 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
int i = 1;
while (i <= 20)
{
   if ( (i % 7) == 0 )
     continue;
   System.out.println(i);
   i++;
}
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 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 đó isẽ mãi mãi bị mắc kẹt trên con số đó 7. Rốt cuộc, continuecâu lệnh bỏ qua hai câu lệnh khác: System.out.println(i)i++. Như kết quả là khi chúng ta đạt đến giá trị 7, biến isẽ 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 itrướ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 igiá trị bắt đầu của sau đó phải là 0.

lựa chọn 1 Lựa chọn 2
int i = 1;
while (i <= 20)
{
   if ( (i % 7) == 0 )
   {
     i++;
     continue;
   }
   
   System.out.println(i);
   i++;
}
int i = 0;
while (i < 20)
{
   i++;
   if ( (i % 7) == 0)
     continue;
   System.out.println(i);
}

"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!"