Từ khóa tiếp tục trên mạng là gì và nó hoạt động như thế nào trong Java?


302

Tôi đã nhìn thấy từ khóa này lần đầu tiên và tôi đã tự hỏi nếu ai đó có thể giải thích cho tôi những gì nó làm.

  • Là gì continuetừ khoá?
  • Làm thế nào nó hoạt động?
  • Khi nào nó được sử dụng?

Câu trả lời:


416

Một continuecâu lệnh không có nhãn sẽ thực hiện lại từ điều kiện trong cùng whilehoặc dovòng lặp và từ biểu thức cập nhật của forvòng lặp trong cùng . Nó thường được sử dụng để chấm dứt sớm quá trình xử lý của vòng lặp và do đó tránh các ifcâu lệnh lồng nhau sâu sắc . Trong ví dụ sau continuesẽ nhận được dòng tiếp theo, mà không xử lý câu lệnh sau trong vòng lặp.

while (getNext(line)) {
  if (line.isEmpty() || line.isComment())
    continue;
  // More code here
}

Với một nhãn, continuesẽ thực hiện lại từ vòng lặp với nhãn tương ứng, thay vì vòng lặp trong cùng. Điều này có thể được sử dụng để thoát khỏi các vòng lặp lồng sâu, hoặc đơn giản là cho rõ ràng.

Đôi khi continuecũng được sử dụng như một trình giữ chỗ để làm cho một vòng lặp trống rõ ràng hơn.

for (count = 0; foo.moreData(); count++)
  continue;

Tuyên bố tương tự không có nhãn cũng tồn tại trong C và C ++. Tương đương trong Perl là next.

Loại luồng điều khiển này không được khuyến nghị, nhưng nếu bạn chọn, bạn cũng có thể sử dụng continueđể mô phỏng một dạng hạn chế goto. Trong ví dụ sau đây continuesẽ thực hiện lại for (;;)vòng lặp trống .

aLoopName: for (;;) {
  // ...
  while (someCondition)
  // ...
    if (otherCondition)
      continue aLoopName;

513

continuelà loại thích goto. Bạn có quen thuộc breakkhông? Ngược lại, dễ nghĩ về chúng hơn:

  • break chấm dứt vòng lặp (nhảy đến mã bên dưới nó).

  • continue chấm dứt phần còn lại của quá trình xử lý mã trong vòng lặp cho lần lặp hiện tại, nhưng vẫn tiếp tục vòng lặp.


1
ví dụ điển hình cho việc nghỉ ngơi và tiếp tục, tôi nghĩ nó cũng giống như vậy trước đây. <
yfsx

Không thể không làm cho nó một 500 hoàn hảo tốt đẹp! +1

100

Hãy xem một ví dụ:

int sum = 0;
for(int i = 1; i <= 100 ; i++){
    if(i % 2 == 0)
         continue;
    sum += i;
}

Điều này sẽ nhận được tổng số chỉ các số lẻ từ 1 đến 100.


28

Nếu bạn nghĩ rằng cơ thể của một vòng lặp như là một chương trình con, continuelà loại như thế return. Cùng một từ khóa tồn tại trong C và phục vụ cùng một mục đích. Đây là một ví dụ giả định:

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

Điều này sẽ chỉ in ra các số lẻ.


16

Nói chung, tôi thấy continue(và break) như một cảnh báo rằng mã có thể sử dụng một số phép tái cấu trúc, đặc biệt là nếu khai báo vòng lặp whilehoặc forkhông ngay lập tức xuất hiện. Điều này cũng đúng vớireturn ở giữa một phương thức, nhưng vì một lý do hơi khác.

Như những người khác đã nói, continuedi chuyển đến lần lặp tiếp theo của vòng lặp, trong khibreak di chuyển ra khỏi vòng lặp kèm theo.

Đây có thể là các khung thời gian bảo trì vì không có liên kết ngay lập tức giữa continue/ breakvà vòng lặp mà nó đang tiếp tục / phá vỡ ngoài ngữ cảnh; thêm một vòng lặp bên trong hoặc di chuyển "ruột" của vòng lặp thành một phương thức riêng biệt và bạn có một hiệu ứng ẩn của continue/ breakfailing.

IMHO, tốt nhất là sử dụng chúng như một biện pháp cuối cùng, và sau đó để đảm bảo rằng việc sử dụng chúng được nhóm lại chặt chẽ ở đầu hoặc cuối vòng lặp để nhà phát triển tiếp theo có thể thấy "giới hạn" của vòng lặp trong một màn hình .

continue, breakreturn(ngoài Trả về một lần thực ở cuối phương thức của bạn), tất cả đều thuộc danh mục chung của "GOTO ẩn". Họ đặt vòng lặp và điều khiển chức năng ở những nơi không mong muốn, cuối cùng gây ra lỗi.


Tôi quan tâm đến lý do tại sao trở lại là xấu. Tôi đã có cảm giác rằng sự trở lại là tồi tệ vì Scala không khuyến khích sự trở lại .
Jus12

1
Mặt khác, cho phép một phương thức quay trở lại từ một vòng lặp được lồng sâu có thể là cách dễ nhất, dễ đọc nhất và hợp lý nhất để thực hiện, thay vì tạo các biến phụ chỉ để làm cho lối thoát vòng lặp trông sạch sẽ hơn.
David R Tribble

5

"continue" trong Java có nghĩa là đi đến cuối vòng lặp hiện tại, có nghĩa là: nếu trình biên dịch thấy tiếp tục trong một vòng lặp, nó sẽ đi đến lần lặp tiếp theo

Ví dụ: Đây là mã để in các số lẻ từ 1 đến 10

trình biên dịch sẽ bỏ qua mã in bất cứ khi nào nó thấy tiếp tục chuyển sang lần lặp tiếp theo

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


4

Như đã đề cập continuesẽ bỏ qua việc xử lý mã bên dưới nó và cho đến khi kết thúc vòng lặp. Sau đó, bạn được chuyển đến điều kiện của vòng lặp và chạy lần lặp tiếp theo nếu điều kiện này vẫn giữ (hoặc nếu có cờ, với điều kiện của vòng lặp được ký hiệu).

Cần phải nhấn mạnh rằng trong trường hợp do - whilebạn được chuyển đến điều kiện ở phía dưới sau a continue, không phải ở đầu vòng lặp.

Đây là lý do tại sao nhiều người không trả lời chính xác những gì đoạn mã sau sẽ tạo ra.

    Random r = new Random();
    Set<Integer> aSet= new HashSet<Integer>();
    int anInt;
    do {
        anInt = r.nextInt(10);
        if (anInt % 2 == 0)
            continue;
        System.out.println(anInt);
    } while (aSet.add(anInt));
    System.out.println(aSet);

* Nếu câu trả lời của bạn là aSetsẽ chỉ chứa số lẻ 100% ... bạn đã nhầm!


4

Tiếp tục là một từ khóa trong Java và nó được sử dụng để bỏ qua lần lặp hiện tại.

Giả sử bạn muốn in tất cả các số lẻ từ 1 đến 100

public class Main {

    public static void main(String args[]) {

    //Program to print all odd numbers from 1 to 100

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

    }
}

Câu lệnh tiếp tục trong chương trình trên chỉ đơn giản bỏ qua phép lặp khi tôi chẵn và in giá trị của i khi nó là số lẻ.

Câu lệnh tiếp tục chỉ đơn giản là đưa bạn ra khỏi vòng lặp mà không thực hiện các câu lệnh còn lại bên trong vòng lặp và kích hoạt lần lặp tiếp theo.


3

Xem xét một điều kiện Nếu khác. Một câu lệnh tiếp tục thực thi những gì có trong một điều kiện và thoát khỏi điều kiện tức là nhảy sang lần lặp hoặc điều kiện tiếp theo. Nhưng một Break rời khỏi vòng lặp. Hãy xem xét chương trình sau đây. '

public class ContinueBreak {
    public static void main(String[] args) {
        String[] table={"aa","bb","cc","dd"};
        for(String ss:table){
            if("bb".equals(ss)){
                continue;
            }
            System.out.println(ss);
            if("cc".equals(ss)){
                break;
            }
        }
        System.out.println("Out of the loop.");
    }

}

Nó sẽ in: aa cc Ra khỏi vòng lặp.

Nếu bạn sử dụng break ở vị trí tiếp tục (Sau if.), Nó sẽ chỉ in aa và ra khỏi vòng lặp .

Nếu điều kiện "bb" bằng ss được thỏa mãn: Tiếp tục: Nó chuyển sang lần lặp tiếp theo tức là "cc" .equals (ss). Đối với Break: Nó đi ra khỏi vòng lặp và in "Out of the loop".


2
Khá chắc chắn rằng nó cũng sẽ in cc kể từ "cc"! = "Bb" và tuyên bố in là trướcbreak
Ted Delezene

2

Tôi đến bữa tiệc muộn một chút, nhưng ...

Điều đáng nói continuelà hữu ích cho các vòng lặp trống trong đó tất cả các công việc được thực hiện trong biểu thức điều kiện kiểm soát vòng lặp. Ví dụ:

while ((buffer[i++] = readChar()) >= 0)
    continue;

Trong trường hợp này, tất cả công việc đọc một ký tự và nối thêm nó vào bufferđược thực hiện trong biểu thức điều khiển whilevòng lặp. Câu continuelệnh đóng vai trò là một chỉ báo trực quan rằng vòng lặp không cần cơ thể.

Rõ ràng hơn một chút so với tương đương:

while (...)
{ }

và chắc chắn là phong cách mã hóa tốt hơn (và an toàn hơn) so với sử dụng một câu lệnh trống như:

while (...)
    ;

Tôi chắc chắn đồng ý rằng mã sạch hơn và dễ đọc hơn, nhưng tôi không chắc rằng tôi tuân theo lập luận của bạn về việc nó "an toàn" hơn so với tùy chọn khác, trong khi (tuyên bố); phân định trực tiếp bằng dấu chấm phẩy.
axolotl

@Aalok - An toàn hơn vì một dấu chấm phẩy đơn độc rất dễ bị bỏ sót. Thật dễ dàng để bỏ qua một cách tình cờ, điều này sẽ khiến cho tuyên bố tiếp theo sau whiletrở thành nội dung của whilemệnh đề và không rõ ràng về mặt trực quan. Một điều rõ ràng continuelà hiển nhiên và truyền đạt một ý định mà một tuyên bố trống rỗng không có.
David R Tribble

Tôi hiểu, vì vậy bạn có nghĩa là chủ yếu từ quan điểm thiết kế. Điều đó có ý nghĩa. Tôi đã có một cái gì đó tiềm ẩn với cách cấu trúc vòng lặp trong tâm trí.
axolotl

1

Về cơ bản trong java, tiếp tục là một tuyên bố. Vì vậy, câu lệnh continue thường được sử dụng với các vòng lặp để bỏ qua bước lặp hiện tại.

Để biết làm thế nào và khi nào nó được sử dụng trong java, hãy tham khảo liên kết dưới đây. Nó đã có lời giải thích với ví dụ.

https://www.flowerbrackets.com/continue-java-example/

Hy vọng nó giúp !!


0

continue phải ở trong một vòng lặp Nếu không nó hiển thị Lỗi bên dưới:

Tiếp tục bên ngoài vòng lặp


0

Câu lệnh continue được sử dụng trong cấu trúc điều khiển vòng lặp khi bạn cần chuyển sang lần lặp tiếp theo của vòng lặp ngay lập tức.

Nó có thể được sử dụng với vòng lặp for hoặc vòng lặp while. Câu lệnh tiếp tục Java được sử dụng để tiếp tục vòng lặp. Nó tiếp tục luồng hiện tại của chương trình và bỏ qua mã còn lại ở điều kiện đã chỉ định.

Trong trường hợp của một vòng lặp bên trong, nó chỉ tiếp tục vòng lặp bên trong.

Chúng ta có thể sử dụng câu lệnh continue của Java trong tất cả các loại vòng lặp như vòng lặp for, vòng lặp while và vòng lặp do-while.

ví dụ

class Example{
    public static void main(String args[]){
        System.out.println("Start");
        for(int i=0; i<10; i++){
            if(i==5){continue;}
            System.out.println("i : "+i);   
        }
        System.out.println("End.");
    }
}

đầu ra:

Start
i : 0
i : 1
i : 2
i : 3
i : 4
i : 6
i : 7
i : 8
i : 9
End.

[số 5 được bỏ qua]

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.