Câu lệnh continue trong Java được giải thích: Cú pháp, ví dụ, thực tiễn tốt nhất và các lựa chọn thay thế

目次

1. Giới thiệu

Khi học lập trình Java, xử lý vòng lặp là một trong những cấu trúc cơ bản thiết yếu. Trong số đó, câu lệnh continue thường bị bỏ qua. Tuy nhiên, khi sử dụng đúng cách, nó có thể cải thiện đáng kể tính dễ đọc và hiệu suất của mã nguồn.

Bằng cách dùng continue, bạn có thể bỏ qua chỉ vòng lặp hiện tại và chuyển sang vòng lặp tiếp theo khi một điều kiện cụ thể được thỏa mãn. Điều này hữu ích, ví dụ, khi bạn muốn loại trừ một số giá trị trong mảng hoặc tránh các phép tính không cần thiết.

Trong bài viết này, chúng tôi sẽ giải thích mọi thứ từ cách sử dụng cơ bản của java continue đến các ví dụ thực tế và sự khác biệt so với các câu lệnh điều khiển vòng lặp khác. Dù bạn là người mới bắt đầu hay một lập trình viên trung cấp đã dùng continue mà chưa hiểu rõ, hướng dẫn này sẽ giúp bạn sử dụng nó một cách tự tin.

Hãy cùng xem xét từng bước java continue, từ cơ bản đến nâng cao.

2. Cú pháp cơ bản và luồng thực thi

Câu lệnh continue chủ yếu được dùng bên trong các vòng lặp. Trong Java, nó có thể được sử dụng trong nhiều cấu trúc vòng lặp như for, whiledo-while. Phần này sẽ giải thích cú pháp cơ bản và cách nó hoạt động.

2-1. Cú pháp cơ bản của continue

Cú pháp của continue rất đơn giản:

for (int i = 0; i < 10; i++) {
    if (i % 2 == 0) {
        continue; // Skip this iteration when the condition is met
    }
    System.out.println(i);
}

Trong ví dụ này, khi i là số chẵn, continue được thực thi và System.out.println(i) bị bỏ qua. Kết quả là chỉ các số lẻ được in ra.

2-2. Luồng vòng lặp và cách continue hoạt động

Khi continue được thực thi, tất cả các câu lệnh còn lại trong vòng lặp hiện tại sẽ bị bỏ qua, và việc thực thi ngay lập tức chuyển sang vòng lặp tiếp theo.

Dưới đây là một luồng đơn giản sử dụng vòng lặp for:

  1. Khởi tạo vòng lặp (ví dụ: int i = 0 )
  2. Kiểm tra điều kiện (ví dụ: i < 10 )
  3. Thực thi thân vòng lặp
  4. Nếu continue được thực thi, bỏ qua các câu lệnh còn lại
  5. Bước tăng (ví dụ: i++ )
  6. Quay lại bước 2

Tóm lại, continue chỉ có nghĩa là “bỏ qua chỉ vòng lặp hiện tại”. Nó hữu ích để kiểm soát rõ ràng các điều kiện bỏ qua ngay cả trong các vòng lặp phức tạp.

2-3. Khi nào continue hữu ích?

Nó đặc biệt có lợi khi bạn muốn bỏ qua việc xử lý cho các điều kiện cụ thể, chẳng hạn như bỏ qua các giá trị không hợp lệ hoặc lỗi và chuyển sang vòng lặp tiếp theo.

Trong các phần sau, chúng ta sẽ khám phá các ví dụ thực tế để minh họa cách sử dụng hiệu quả.

3. Các ví dụ mã thực tiễn

Phần này giới thiệu các ví dụ cụ thể sử dụng continue để giúp bạn hình dung cách áp dụng trong thực tế.

3-1. Sử dụng continue trong vòng for: Bỏ qua các giá trị cụ thể

Ví dụ, nếu bạn muốn bỏ qua các bội số của 3 trong khoảng từ 1 đến 10:

for (int i = 1; i <= 10; i++) {
    if (i % 3 == 0) {
        continue; // Skip multiples of 3
    }
    System.out.println(i);
}

Đoạn mã này sẽ in ra tất cả các số ngoại trừ 3, 6 và 9.

3-2. Sử dụng continue trong vòng while: Kiểm tra đầu vào

Khi xử lý đầu vào của người dùng, bạn có thể muốn bỏ qua các giá trị không hợp lệ như số âm:

Scanner scanner = new Scanner(System.in);
int count = 0;
while (count < 5) {
    System.out.print("Please enter a positive integer: ");
    int num = scanner.nextInt();
    if (num < 0) {
        System.out.println("Negative values are ignored.");
        continue;
    }
    System.out.println("Entered value: " + num);
    count++;
}

Ở đây, các giá trị âm sẽ bị bỏ qua và không làm tăng count.

3-3. Sử dụng continue trong vòng for mở rộng (for-each)

Bạn cũng có thể dùng continue khi duyệt qua các collection:

String[] names = {"田中", "", "佐藤", "鈴木", ""};
for (String name : names) {
    if (name.isEmpty()) {
        continue;
    }
    System.out.println(name);
}

Chỉ các chuỗi không rỗng sẽ được in ra.

4. Sự khác biệt rõ ràng giữa continuebreak

Câu lệnh continue thường được so sánh với break, nhưng hành vi của chúng cơ bản là khác nhau.

4-1. Những điểm khác biệt chính

  • continue : Bỏ qua vòng lặp hiện tại và chuyển sang vòng lặp tiếp theo.
  • break : Kết thúc toàn bộ vòng lặp ngay lập tức.

4-2. So sánh mã nguồn

ví dụ continue:

for (int i = 1; i <= 10; i++) {
    if (i % 2 != 0) {
        continue;
    }
    System.out.println(i);
}

ví dụ break:

for (int i = 1; i <= 10; i++) {
    if (i == 5) {
        break;
    }
    System.out.println(i);
}

4-3. Hướng dẫn sử dụng

  • Dùng continue khi bạn muốn bỏ qua một phần của vòng lặp.
  • Dùng break khi bạn muốn thoát hoàn toàn khỏi vòng lặp.

5. Sử dụng nâng cao: continue có nhãn

Java hỗ trợ continue có nhãn, cho phép bạn chỉ định vòng lặp nào sẽ được tiếp tục trong các vòng lặp lồng nhau.

5-1. Cú pháp cơ bản

outerLoop:
for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= 3; j++) {
        if (j == 2) {
            continue outerLoop;
        }
        System.out.println("i=" + i + ", j=" + j);
    }
}

5-2. Kết quả thực thi

i=1, j=1
i=2, j=1
i=3, j=1

5-3. Xem xét tính dễ đọc

Mặc dù continue có nhãn có thể đơn giản hoá việc điều khiển vòng lặp lồng nhau, việc lạm dụng có thể làm giảm tính dễ đọc. Nên sử dụng một cách có chừng mực.

5-4. Nguy cơ vòng lặp vô hạn

Cẩn thận khi bỏ qua logic cập nhật điều kiện vòng lặp, vì điều này có thể gây ra vòng lặp vô hạn.

6. Các thực tiễn tốt và những cạm bẫy

6-1. Tránh lạm dụng continue

Lạm dụng có thể làm cho mã khó hiểu hơn.

6-2. Ngăn ngừa vòng lặp vô hạn

int i = 0;
while (i < 5) {
    if (i == 2) {
        continue;
    }
    i++;
    System.out.println(i);
}

Mã này gây ra vòng lặp vô hạn vì i++ bị bỏ qua.

6-3. Xem xét trong môi trường phát triển nhóm

Sử dụng continue một cách cẩn thận và ghi chú rõ ràng ý định trong môi trường làm việc nhóm.

6-4. Xem xét các lựa chọn thay thế

Đôi khi việc tái cấu trúc logic hoặc dùng trả về sớm (early return) có thể loại bỏ nhu cầu dùng continue.

7. Các lựa chọn tinh vi hơn

7-1. Stream API

Arrays.stream(names)
      .filter(name -> !name.isEmpty())
      .forEach(System.out::println);

7-2. Phân tách phương thức

for (User user : userList) {
    if (isValid(user)) {
        process(user);
    }
}

7-3. Quan điểm phát triển quy mô lớn

Tính dễ đọc và khả năng bảo trì được đặt lên hàng đầu, vì vậy Streams và thiết kế sạch sẽ thường được ưu tiên.

8. Tóm tắt

8-1. Khái niệm cốt lõi

continue bỏ qua vòng lặp hiện tại và chuyển sang vòng lặp tiếp theo.

8-2. Khác biệt so với break

  • break: thoát khỏi vòng lặp
  • continue: bỏ qua một vòng lặp

8-3. Thực tiễn tốt nhất

  • Tránh sử dụng quá mức
  • Ngăn ngừa vòng lặp vô hạn
  • Viết mã dễ đọc

8-4. Sử dụng các tính năng Java hiện đại

Streams và phân tách phương thức thường cung cấp các lựa chọn an toàn hơn.

8-5. Bài tập thực hành

  • Bỏ qua các phần tử có điều kiện
  • So sánh với breakreturn
  • Tái hiện lại bằng Stream API

FAQ

Q1. Làm sao chọn giữa continuebreak?

Dùng continue để bỏ qua một vòng lặp và break để thoát khỏi vòng lặp.

Q2. Khi nào nên dùng continue có nhãn?

Chỉ khi bạn cần bỏ qua các vòng lặp bên ngoài trong cấu trúc lồng nhau.

Q3. Stream API có thể thay thế continue không?

Có, việc dùng filter đạt được cùng hiệu quả.

Q4. Làm sao tránh vòng lặp vô hạn?

Đảm bảo các bộ đếm vòng lặp được cập nhật trước khi gọi continue.

Q5. continue có ảnh hưởng tới hiệu năng không?

Không có ảnh hưởng đáng kể khi được sử dụng một cách hợp lý.

Q6. continue có được khuyến nghị trong mã sản xuất không?

Có thể chấp nhận cho các trường hợp đơn giản, nhưng nên ưu tiên tính rõ ràng và khả năng bảo trì.