Java hỗ trợ ba toán tử nhảy - Sử dụng toán tử
Toán tử Sử dụng
Ngoài việc được sử dụng trong các câu lệnh switch và vòng lặp, Sử dụng toán tử
Đôi khi việc bắt đầu vòng lặp tiếp theo sớm sẽ rất hữu ích. Nghĩa là, bạn cần tiếp tục thực hiện vòng lặp nhưng dừng xử lý phần còn lại của mã trong phần nội dung của vòng lặp cho lần lặp cụ thể này. Trên thực tế, đây là Nhà điều hành
Câu lệnh điều khiển cuối cùng là
break
, continue
và return
. Họ chuyển quyền kiểm soát sang một phần khác trong chương trình của bạn. Chúng ta hãy xem xét chi tiết từng nhà khai thác.
Sử dụng toán tửbreak
Toán tử break
trong Java được sử dụng trong ba trường hợp. Đầu tiên, như bạn đã thấy, nó kết thúc chuỗi các câu lệnh tại các nhánh câu lệnh switch
. Thứ hai, nó có thể được sử dụng để thoát khỏi vòng lặp. Thứ ba, nó có thể được sử dụng như một hình thức “văn minh” của toán tử nhảy vô điều kiện goto
. Phần này giải thích hai trường hợp cuối cùng. Sử dụng break
để thoát khỏi vòng lặp Bằng cách sử dụng break
, bạn có thể buộc vòng lặp kết thúc ngay lập tức, bỏ qua biểu thức điều kiện và bất kỳ mã nào còn lại trong thân vòng lặp. Khi break
gặp một câu lệnh trong một vòng lặp, câu lệnh thứ hai kết thúc và điều khiển chương trình được chuyển sang câu lệnh theo sau nó. Ví dụ đơn giản:
// Использование break для выхода из цикла.
public class BreakLoop {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
if (i == 4) {
break; // завершить цикл, если i = 4
}
System.out.println("i: " + i);
}
System.out.println("Цикл завершен.");
}
}
Chương trình này tạo ra đầu ra sau:
i: 0
i: 1
i: 2
i: 3
Цикл завершен.
Mặc dù vòng lặp for
được thiết kế ở đây để thực thi các câu lệnh của nó từ 0 đến 99 lần, toán tử break
khiến nó kết thúc sớm khi i bằng 4. Toán tử break
có thể được sử dụng với bất kỳ vòng lặp nào của Java, kể cả các vòng lặp vô hạn có chủ ý. Ví dụ: bên dưới là chương trình trước đó được mã hóa bằng vòng lặp while
. Đầu ra của chương trình này giống như chương trình tiền nhiệm của nó.
// Использование break для выхода из while-цикла.
public class BreakLoop2 {
public static void main(String[] args) {
int i = 0;
while (i < 100) {
if (i == 4) {
break; // закончить цикл, если i = 4
}
System.out.println("i: " + i);
i++;
}
System.out.println("Цикл завершен.");
}
}
Khi được sử dụng trong một tập hợp các vòng lặp lồng nhau, câu lệnh break
sẽ chỉ thoát khỏi vòng lặp trong cùng. Ví dụ:
// Использование break во вложенных циклах.
public class BreakLoop3 {
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
System.out.print("Итерация " + i + ": ");
for (int j = 0; j < 10; j++) {
if (j == 4) {
break; // закончить цикл, если j = 4
}
System.out.print(j + " ");
}
System.out.println();
}
System.out.println("Цикл завершен.");
}
}
Chương trình này tạo ra đầu ra sau:
Итерация 0: 0 1 2 3
Итерация 1: 0 1 2 3
Итерация 2: 0 1 2 3
Цикл завершен.
Như bạn có thể thấy, câu lệnh break
ở vòng lặp bên trong chỉ làm cho vòng lặp đó kết thúc. Vòng lặp bên ngoài không bị ảnh hưởng. Hãy để chúng tôi đưa ra thêm hai nhận xét liên quan đến break
. Đầu tiên, nhiều câu lệnh có thể xuất hiện trong một vòng lặp break
. Tuy nhiên, hãy cẩn thận. Quá nhiều trong số chúng có xu hướng phá hủy mã của bạn. Thứ hai, break
, kết thúc toán tử - switch
, chỉ ảnh hưởng đến switch
toán tử - đã cho (và không ảnh hưởng đến các vòng lặp bao gồm nó). Bình luận: Break
không được thiết kế như một phương tiện chấm dứt vòng lặp thông thường. Mục đích này được phục vụ bởi biểu thức điều kiện tiêu đề vòng lặp. Câu lệnh break
chỉ nên được sử dụng để ngắt vòng lặp khi phát sinh một số tình huống đặc biệt.
Sử dụng break
như một hình thứcgoto
Ngoài việc được sử dụng trong các câu lệnh switch và vòng lặp, break
nó còn có thể được sử dụng một mình như một dạng "văn minh" của goto
. Java không chứa toán tử goto
vì nó thực hiện nhánh một cách tùy ý và không có cấu trúc. Mã sử dụng ... nhiều goto
thường khó hiểu và khó bảo trì. Nó cũng ghi đè một số tối ưu hóa trình biên dịch. Tuy nhiên, có một số vị trí trong chương trình mà goto
luồng điều khiển là một cấu trúc có giá trị và hợp pháp. Ví dụ: goto
nó có thể hữu ích khi bạn thoát ra khỏi một tập hợp các vòng lặp lồng nhau sâu. Để xử lý những tình huống như vậy, Java định nghĩa một dạng mở rộng của toán tử break
. Sử dụng nó, bạn có thể thoát một hoặc nhiều khối mã. Các khối này không cần phải là một phần của vòng lặp hoặc câu lệnh switch
. Đây có thể là bất kỳ khối nào. Tiếp theo, bạn có thể xác định chính xác nơi việc thực thi sẽ tiếp tục vì biểu mẫu này break
hoạt động với nhãn hiệu và mang lại lợi ích về goto
việc bỏ qua các vấn đề của nó. Câu break
lệnh được gắn nhãn có dạng tổng quát sau: break label;
Đây label
là tên của nhãn xác định một số khối mã. Khi biểu mẫu này break
được thực thi, điều khiển sẽ được chuyển từ khối mã được đặt tên (có nhãn được chỉ định trong câu lệnh break
) sang câu lệnh theo sau khối đó. Một khối mã được đánh dấu nhất thiết phải bao gồm câu lệnh này break
, nhưng không bắt buộc sự bao gồm này phải trực tiếp (nghĩa là break
nó có thể được bao gồm không trực tiếp trong một khối có nhãn riêng của nó, mà trong một khối lồng nhau bên trong nó, cũng có thể được đánh dấu ). Điều này có nghĩa là bạn có thể sử dụng toán tử được đánh dấu break
để thoát khỏi tập hợp các khối lồng nhau. Nhưng bạn không thể sử dụng break
khối mã không bao gồm phần mở rộng break
. Để đặt tên cho khối, đặt nhãn ở đầu khối (trước dấu ngoặc nhọn mở). Nhãn là bất kỳ mã định danh Java hợp lệ nào được theo sau bởi dấu hai chấm. Sau khi gắn nhãn cho một khối, nhãn của nó có thể được sử dụng làm đối số cho toán tử break
. Điều này sẽ khiến việc thực thi tiếp tục từ cuối khối được đánh dấu. Ví dụ: chương trình sau chứa ba khối lồng nhau, mỗi khối có nhãn riêng. Toán tử break
di chuyển về phía trước, vượt ra ngoài phần cuối của khối được đánh dấu bằng nhãn second
, bỏ qua hai toán tử println()
.
// Использование break How цивorзованной формы goto.
public class Break {
public static void main(String[] args) {
boolean t = true;
first:
{
second:
{
third:
{
System.out.println("Перед оператором break.");
if (t) {
break second; // выход из блока second
}
System.out.println("Данный оператор никогда не выполнится");
}
System.out.println("Данный оператор никогда не выполнится ");
}
System.out.println("Данный оператор размещен после блока second.");
}
}
}
Chạy chương trình này sẽ tạo ra kết quả sau:
Перед оператором break.
Данный оператор размещен после блока second.
Một trong những cách sử dụng phổ biến nhất của toán tử được đánh dấu break
là thoát khỏi các vòng lặp lồng nhau. Ví dụ: trong chương trình sau, vòng lặp bên ngoài chỉ được thực hiện một lần:
// Использование break для выхода из вложенных циклов.
public class BreakLoop4 {
public static void main(String[] args) {
outer:
for (int i = 0; i < 3; i++) {
System.out.print("Итерация " + i + ": ");
for (int j = 0; j < 100; j++) {
if (j == 10) {
break outer; // выйти из обоих циклов
}
System.out.print(j + " ");
}
System.out.println("Эта строка никогда не будет выведена");
}
System.out.println("Цикл завершен.");
}
}
Chương trình tạo ra đầu ra sau:
Итерация 0: 0 1 2 3 4 5 6 7 8 9 Цикл завершен.
Dễ dàng nhận thấy khi vòng lặp bên trong bị gián đoạn trước khi vòng lặp bên ngoài kết thúc thì cả hai vòng lặp đều kết thúc. Hãy nhớ rằng bạn không thể thực hiện break
-jump tới bất kỳ nhãn nào không được xác định cho khối kèm theo. Ví dụ: chương trình sau không hợp lệ và sẽ không biên dịch:
// Эта программа содержит ошибку.
public class BreakErr {
public static void main(String[] args) {
one:
for (int i = 0; i < 3; i++) {
System.out.print("Итерация " + i + ": ");
}
for (int j = 0; j < 100; j++) {
if (j == 10) {
break one; //He верно!
}
System.out.print(j + " ");
}
}
}
Vì vòng lặp được đánh dấu không bao gồm câu lệnh break
nên không thể chuyển quyền điều khiển sang khối này.
Sử dụng toán tửcontinue
Đôi khi việc bắt đầu vòng lặp tiếp theo sớm sẽ rất hữu ích. Nghĩa là, bạn cần tiếp tục thực hiện vòng lặp nhưng dừng xử lý phần còn lại của mã trong phần nội dung của vòng lặp cho lần lặp cụ thể này. Trên thực tế, đây là goto
quá trình chuyển đổi từ các thao tác phần thân tiếp theo sang phần cuối của khối vòng lặp. Hành động này được thực hiện bởi người vận hành continue
. Trong vòng lặp, toán tử while
and làm cho điều khiển được chuyển trực tiếp đến biểu thức điều kiện điều khiển vòng lặp. Trong một vòng lặp, điều khiển trước tiên chuyển đến phần lặp của câu lệnh và sau đó đến biểu thức điều kiện. Đối với cả ba vòng lặp, mọi mã trung gian đều được bỏ qua. Dưới đây là một chương trình ví dụ sử dụng để in hai số trên mỗi dòng:do while
continue
for
for
continue
// Демонстрирует continue.
public class Continue {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
System.out.print(i + " ");
if (i % 2 == 0) {
continue;
}
System.out.println("");
}
}
}
Mã này sử dụng phép toán %
(modulo) để kiểm tra xem có thứ gì đó i
chẵn không. Nếu vậy, vòng lặp tiếp tục mà không in ký tự dòng mới. Đầu ra chương trình:
0 1
2 3
4 5
6 7
8 9
Giống như toán tử break
, , continue
bạn có thể xác định nhãn cho biết vòng lặp kèm theo nào sẽ tiếp tục. Một chương trình ví dụ sử dụng continue
để in bảng nhân tam giác từ 0 đến 9.
// Использование continue с меткой.
public class ContinueLabel {
public static void main(String[] args) {
outer:
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (j > i) {
System.out.println();
continue outer;
}
System.out.print(" " + (i * j));
}
}
System.out.println();
}
}
Câu lệnh continue
trong ví dụ này kết thúc việc đánh giá vòng lặp j
và tiếp tục với lần lặp tiếp theo của vòng lặp được điều khiển bởi i
. Đầu ra từ chương trình này:
0
0 1
0 2 4
0 3 6 9
0 4 8 12 16
0 5 10 15 20 25
0 6 12 18 24 30 36
0 7 14 21 28 35 42 49
0 8 16 24 32 40 48 56 64
0 9 18 27 36 45 54 63 72 81
Nó cực kỳ hiếm khi hữu ích continue
. Một lý do cho điều này là Java cung cấp một tập hợp phong phú các câu lệnh lặp phù hợp với hầu hết các ứng dụng. Tuy nhiên, đối với những tình huống đặc biệt cần phải chấm dứt vòng lặp sớm, câu lệnh continue
cung cấp một cách có cấu trúc để hoàn thành nhiệm vụ này.
Nhà điều hànhreturn
Câu lệnh điều khiển cuối cùng là return
. Nó được sử dụng để trả về một cách rõ ràng từ một phương thức, nghĩa là nó chuyển điều khiển chương trình trở lại chương trình gọi. Toán tử return
được phân loại là toán tử chuyển tiếp. Mặc dù cuộc thảo luận đầy đủ về nó phải đợi cho đến khi các phương pháp được thảo luận, nhưng một bản tổng quan ngắn gọn được cung cấp ở đây return
. Toán tử return
có thể được sử dụng ở bất cứ đâu trong một phương thức để quay lại chương trình gọi phương thức đó. Câu lệnh return
ngay lập tức kết thúc việc thực thi phương thức mà nó đang sử dụng. Ví dụ sau đây minh họa điều này:
// Демонстрирует return.
public class Return {
public static void main(String[] args) {
boolean t = true;
System.out.println("Перед оператором return.");
if (t) {
return; // возврат в вызывающую программу
}
System.out.println("Этот оператор никогда не выполнится.");
}
}
Điều này return
trả về hệ thống Java khi chạy, vì đây là hệ thống gọi tệp main()
. Đầu ra từ chương trình này:
Перед оператором return.
Bạn có thể nhận thấy rằng câu lệnh cuối cùng println()
không được thực thi. Tại thời điểm thực hiện, return
quyền điều khiển được chuyển trở lại chương trình gọi. Một lưu ý cuối cùng. Trong chương trình trước, if
toán tử (t) là cần thiết. Nếu không có nó, trình biên dịch Java sẽ đưa ra lỗi "mã không thể truy cập" vì nó biết rằng câu lệnh cuối cùng println()
sẽ không bao giờ được thực thi. Để tránh lỗi này, toán tử (t) được sử dụng if
; nó đánh lừa trình biên dịch vì mục đích minh họa này. Liên kết tới nguồn ban đầu: Toán tử chuyển tiếp
GO TO FULL VERSION