Vòng lặp (ngắt và quay lại, tiếp tục, nhãn) - 1

"Chào, Amigo!"

"Hôm nay tôi sẽ cho bạn biết về một số điều thuận tiện khi làm việc với các vòng lặp."

"Đầu tiên là từ khóa break . Nếu bạn sử dụng lệnh này trong phần thân của vòng lặp, thì vòng lặp sẽ kết thúc ngay lập tức khi lệnh được thực thi. Đây là một ví dụ:"

Ví dụ Đầu ra:
for (int i = 0; i < 10; i++)
{
System.out.println(i);
if (i > 5)
break;
}
0
1
2
3
4
5

"Có thể phá vỡ chỉ được sử dụng trong một vòng lặp?"

"Có. Câu lệnh ngắt chỉ có thể được sử dụng trong vòng lặp. Khi câu lệnh ngắt được thực thi, vòng lặp sẽ kết thúc ngay lập tức."

"OK đã nhận nó."

"Tuyệt vời. Bây giờ, điều thứ hai tôi muốn chia sẻ là từ khóa tiếp tục. Nó cũng chỉ có thể được sử dụng trong một vòng lặp. Khi lệnh này được thực thi, một lần lặp mới của vòng lặp sẽ bắt đầu ngay lập tức. Nói cách khác, mọi mã còn lại trong phần thân của vòng lặp chỉ đơn giản là bị bỏ qua."

"Đây là một ví dụ:"

Ví dụ Đầu ra:
for (int i = 0; i < 10; i++)
{
if (i % 2 == 0)
continue;
System.out.println(i);
}
1
3
5
7
9

"Vì vậy, một khi chương trình đạt đến lệnh tiếp tục trong một vòng lặp, nó sẽ dừng thực thi mã trong vòng lặp?"

"Không. Hãy nhìn xem, chúng ta có một vòng lặp khi chúng ta thực thi cùng một đoạn mã nhiều lần. Trong ví dụ trên, chúng ta có một vòng lặp từ 0 đến 9, tức là phần thân của vòng lặp sẽ được thực thi 10 lần. Đúng không?"

"Đúng."

"Một lần đi qua phần thân của vòng lặp được gọi là một lần lặp. Vòng lặp của chúng tôi bao gồm 10 lần lặp—phần thân của vòng lặp sẽ được thực hiện mười lần."

"Ừ, rõ ràng rồi."

" Lệnh continue kết thúc quá trình lặp hiện tại sớm, tức là mọi mã còn lại bên trong vòng lặp sẽ bị bỏ qua và một lần lặp mới bắt đầu."

"Đây là một ví dụ khác:"

Ví dụ
ArrayList list = new ArrayList();
for (Object o: list)
{
if (o == null) continue;
System.out.println(o.toString());
}

"Trong ví dụ này, chúng tôi hiển thị một chuỗi đại diện cho tất cả các đối tượng trong danh sách. Nhưng chúng tôi bỏ qua bất kỳ đối tượng nào không có giá trị."

"OK, hiểu rồi. Tôi có thể thấy điều này tiện lợi như thế nào."

"Vâng. Tôi cũng muốn nói với bạn về các nhãn. Chúng hiếm khi được sử dụng trong Java, vì chúng thường vi phạm tính logic của chương trình. Nhưng đôi khi bạn có thể gặp chúng trong mã. Vì vậy, tôi muốn nói với bạn về chúng hơn là bạn đã nghe về chúng trên sân chơi."

"Ngày xửa ngày xưa, người ta cho phép nhảy từ bất kỳ dòng nào sang bất kỳ dòng nào trong mã. Chúng tôi đã làm điều này bằng cách sử dụng nhãn và câu lệnh goto. Đây là giao diện của nó:"

Mã khủng khiếp với nhãn
System.out.println("Make cookies,");
label: System.out.println("not");
System.out.println("war");
goto label;

“Trong ví dụ này, sau khi lệnh goto label được thực thi, chương trình sẽ nhảy đến dòng được đánh dấu label .

"Sau đó, mọi người đã sáng suốt và quyết định không sử dụng câu lệnh goto . Java không hỗ trợ goto, nhưng goto là một từ dành riêng. Không có gì to tát..."

"Vì vậy, không có goto và không có nhãn trong Java?"

"Không có câu lệnh goto, nhưng có nhãn!"

"Làm thế nào mà có thể được?"

"Trong Java, các nhãn có thể được sử dụng với các lệnh tiếp tục và ngắt. Chúng được sử dụng khi bạn có nhiều vòng lặp lồng nhau."

"Ví dụ: giả sử bạn có 5 vòng lặp lồng nhau và khi một số điều kiện được thỏa mãn, bạn muốn thoát khỏi ba trong số chúng, nhưng không phải tất cả chúng. Nhãn là một cách hay để thực hiện việc này:"

Ví dụ
label1: for (int i = 0; i < 10; i++)
 label2: for (int j = 0; j < 10; j++)
  label3: for (int k =0; k < 10; k++)
   if (i == j && j == k)
    break label2;

"Trong ví dụ này, khi câu lệnh break được thực thi, chúng ta thoát không phải khỏi vòng lặp có biến k, mà là khỏi vòng lặp có nhãn label2 - tức là chúng ta thoát ngay hai vòng lặp có k và j."

"Cái đó được sử dụng thường xuyên như thế nào?"

"Thành thật mà nói, không thường xuyên, nhưng bạn không bao giờ biết. Có thể một lúc nào đó bạn sẽ thấy nó. Đây là những nguyên tắc cơ bản về cú pháp - bạn cần phải biết tất cả những điều này!"

"Được. Cảm ơn, Bilaabo."