Perbedaan antara pernyataan break dan continue


266

Adakah yang bisa memberi tahu saya perbedaan breakdan continuepernyataan?

Jawaban:


531

breakmeninggalkan satu lingkaran, continuemelompat ke iterasi berikutnya.


3
Perhatikan bahwa Java juga berisi pernyataan berlanjut / hancurkan berlabel yang memiliki semantik berbeda :-)
Jay

4
Ini hanya dasar-dasar istirahat dan melanjutkan. Untuk penjelasan yang lebih baik lihat di Jay's Post
Xn0vv3r

1
Bagi mereka yang bertanya-tanya, untuk menggunakan label Anda menulis nama label diikuti dengan ':' sebelum loop.
Caelum

"break" akan mengakhiri pergantian pernyataan juga
samsamara

1
akan terus melompat ke iterasi berikutnya bahkan jika dalam pernyataan if else di dalam untuk setiap loop?
klutch

102

Lihat Pernyataan Percabangan untuk detail lebih lanjut dan contoh kode:

break

Pernyataan istirahat memiliki dua bentuk: berlabel dan tidak berlabel. Anda melihat formulir yang tidak berlabel dalam diskusi sebelumnya tentang pernyataan switch. Anda juga dapat menggunakan jeda tanpa label untuk mengakhiri loop for, while, atau do-while [...]

Pernyataan istirahat yang tidak berlabel mengakhiri sakelar terdalam, untuk, sementara, atau pernyataan do-while, tetapi istirahat berlabel mengakhiri pernyataan luar.

continue

Pernyataan melanjutkan melewatkan iterasi saat ini untuk loop for, while, atau do-while. Bentuk yang tidak berlabel melompat ke ujung tubuh loop paling dalam dan mengevaluasi ekspresi boolean yang mengontrol loop. [...]

Pernyataan lanjut berlabel melewatkan iterasi saat ini dari loop luar yang ditandai dengan label yang diberikan.


66
System.out.println ("starting loop:");
for (int n = 0; n < 7; ++n)
{
    System.out.println ("in loop: " + n);
    if (n == 2) {
        continue;
    }
    System.out.println ("   survived first guard");
    if (n == 4) {
        break;
    }
    System.out.println ("   survived second guard");
    // continue at head of loop
}
// break out of loop
System.out.println ("end of loop or exit via break");

Ini akan menghasilkan output sebagai berikut:

starting loop:
in loop: 0
    survived first guard
    survived second guard
in loop: 1
    survived first guard
    survived second guard
in loop: 2
in loop: 3
    survived first guard
    survived second guard
in loop: 4
    survived first guard
end of loop or exit via break

Anda bisa memberi label blok, tidak hanya for-loop, dan kemudian istirahat / lanjutkan dari blok bersarang ke yang luar. Dalam beberapa kasus ini mungkin berguna, tetapi secara umum Anda akan mencoba untuk menghindari kode seperti itu, kecuali logika program jauh lebih baik untuk dipahami daripada dalam contoh berikut:

first:
for (int i = 0; i < 4; ++i) 
{
    second:
    for (int j = 0; j < 4; ++j) 
    {
        third:
        for (int k = 0; k < 4; ++k) 
        {
            System.out.println ("inner start: i+j+k " + (i + j + k));
            if (i + j + k == 5)
                continue third;
            if (i + j + k == 7)
                continue second;
            if (i + j + k == 8)
                break second;
            if (i + j + k == 9)
                break first;
            System.out.println ("inner stop:  i+j+k " + (i + j + k));
        }
    }       
}

Karena itu mungkin, itu tidak berarti Anda harus menggunakannya.

Jika Anda ingin mengaburkan kode Anda dengan cara yang lucu, Anda tidak memilih nama yang jahat, tetapi http: dan ikuti dengan komentar, yang terlihat asing, seperti webadress dalam kode sumber:

http://stackoverflow.com/questions/462373
for (int i = 0; i < 4; ++i) 
{
     if (i == 2) 
         break http;

Saya kira ini dari Joshua Bloch quizzle. :)


1
Gagasan bagus dengan pendidikan buruk, bukankah hanya memiliki http://stackoverflow.com/questions/462373/pekerjaan juga?
Caelum

@ user2104648: ya, itu pasti merupakan kesalahan tempel cut 'n'.
pengguna tidak diketahui

28

Break meninggalkan loop sepenuhnya dan menjalankan pernyataan setelah loop. Sedangkan Lanjutkan meninggalkan iterasi saat ini dan dieksekusi dengan nilai berikutnya dalam loop.

Kode Ini Menjelaskan Segalanya:

public static void main(String[] args) {
    for(int i=0;i<10;i++)
    {
        if (i==4)
        {
            break;
        }
        System.out.print(i+"\t");

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

        if (i==4)
        {
            continue;
        }
        System.out.print(i+"\t");
    }
}

Keluaran:

0   1   2   3   
0   1   2   3   5   6   7   8   9

24

breaksepenuhnya keluar dari loop. continuemelompat laporan setelah terus pernyataan dan terus perulangan.


12

Pernyataan Break

Kadang-kadang perlu untuk keluar dari loop sebelum loop selesai sepenuhnya iterasi semua nilai langkah. Misalnya, mengulang daftar angka sampai Anda menemukan nomor yang memenuhi syarat tertentu. Atau mengulangi aliran karakter dari file hingga karakter tertentu dibaca.

Dalam contoh berikut, kami menggunakan loop sederhana untuk mencetak nilai dari 0 hingga 9:

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

Keluaran:

0
1
2
3
4
5
6
7
8
9

Sekarang jika kita menambahkan pernyataan break ketika i == 4, kode kita akan keluar dari loop setelah saya sama dengan 4. Anda dapat menggunakan pernyataan break untuk keluar dari loop, sementara loop dan loop do-while. Pernyataan break hanya akan keluar dari loop saat ini. Untuk keluar dari loop luar dari loop dalam bersarang, Anda harus menggunakan label dengan pernyataan break.

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

Keluaran:

0
1
2
3
4

Lanjutkan Pernyataan

Pernyataan Java berlanjut melompati iterasi saat ini dari loop dan langsung ke iterasi berikutnya. Setelah memanggil pernyataan lanjut dalam for for, eksekusi loop akan mengeksekusi nilai langkah dan mengevaluasi kondisi boolean sebelum melanjutkan dengan iterasi berikutnya. Pada contoh berikut, kami mencetak semua nilai dari 0 hingga 9 dalam satu lingkaran tetapi kami melewatkan pencetakan 4.

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

Keluaran:

0
1
2
3
5 <---- SKIPPED OVER 4 and continued with next loop iteration
6
7
8
9

Label Loop - Break Statement Anda dapat menggunakan label dalam loop bersarang dengan menentukan di mana Anda ingin melanjutkan eksekusi setelah keluar dari loop dalam. Biasanya, pernyataan break hanya akan keluar dari loop terdalam sehingga ketika Anda ingin keluar dari loop luar, Anda dapat menggunakan label untuk mencapai ini, pada dasarnya melakukan sesuatu yang mirip dengan pernyataan goto.

Contoh berikut menggunakan 3 loop, semua bersarang di dalam satu sama lain. Karena tidak ada cara yang sepenuhnya keluar dari loop paling luar dari dalam loop paling dalam, kita dapat menggunakan label "outer1" untuk mencapai ini dan menentukan label di sebelah pernyataan break.

outer1:
for(int i=0; i<5; i++) {
  for(int j=0; j<4; j++) {
    for(int k=0; k<2; k++) {
      System.out.println("[" + i + "][" + j + "][" + k + "]");
      if(j == 3) {
        break outer1;
      }
    }
  }
}

Keluaran:

[0][0][0]
[0][0][1]
[0][1][0]
[0][1][1]
[0][2][0]
[0][2][1]
[0][3][0]

Perhatikan bagaimana baris terakhir yang ditampilkan adalah " 0 [0]" yang merupakan tempat j == 3 dan di situlah kami menyebutnya "break outer1;" untuk keluar dari loop paling luar.

Label Lingkaran - Lanjutkan Pernyataan

Anda juga dapat menggunakan label dengan kata kunci terus untuk melanjutkan pengulangan dari titik tertentu. Mengambil contoh sebelumnya dan hanya mengubah satu baris untuk menentukan continue outer1;alih-alih break outer1;akan menyebabkan loop untuk melanjutkan looping dari outer1label alih-alih keluar dari loop. Perhatikan bagaimana setiap kali continue outer1;dipanggil, kode berlanjut dari loop luar setelah menambah indeks loop i dengan 1.

outer1:
for(int i=0; i<5; i++) {
  for(int j=0; j<4; j++) {
    for(int k=0; k<2; k++) {
      System.out.println("[" + i + "][" + j + "][" + k + "]");
      if(j == 3) {
        continue outer1;
    }
  }
}

[0][0][0]
[0][0][1]
[0][1][0]
[0][1][1]
[0][2][0]
[0][2][1]
[0][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[1][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[1][0][1]
[1][1][0]
[1][1][1]
[1][2][0]
[1][2][1]
[1][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[2][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[2][0][1]
[2][1][0]
[2][1][1]
[2][2][0]
[2][2][1]
[2][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[3][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[3][0][1]
[3][1][0]
[3][1][1]
[3][2][0]
[3][2][1]
[3][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[4][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[4][0][1]
[4][1][0]
[4][1][1]
[4][2][0]
[4][2][1]
[4][3][0]

Sumber: Loops in Java - Ultimate Guide


7

Jawaban luar biasa sederhana dan akurat.

Saya akan menambahkan contoh kode.

C:\oreyes\samples\java\breakcontinue>type BreakContinue.java

    class BreakContinue {

        public static void main( String [] args ) {

               for( int i = 0 ; i < 10 ; i++ ) {

                     if( i % 2 == 0) { // if pair, will jump
                         continue; // don't go to "System.out.print" below.
                     }

                     System.out.println("The number is " + i );

                     if( i == 7 ) {
                         break; // will end the execution, 8,9 wont be processed
                      }

               }
        }

    }

C:\oreyes\samples\java\breakcontinue>java BreakContinue
The number is 1
The number is 3
The number is 5
The number is 7

6

Sebuah breakhasil pernyataan dalam penghentian pernyataan untuk yang berlaku ( switch, for, do, atau while).

Sebuah continuepernyataan digunakan untuk mengakhiri loop iterasi saat ini dan kembali kontrol ke pernyataan loop.


5

continuemelewatkan loop saat ini dan MOVES KE loop berikutnya sedangkan break MOVES OUT dari loop dan mengeksekusi pernyataan berikutnya setelah loop. Saya mempelajari perbedaannya menggunakan kode berikut. Lihat output yang berbeda. Semoga ini bisa membantu.

public static void main(String[] args) {
    for(int i = 0; i < 5; i++){
        if (i == 3) {
            continue;
        }
        System.out.print(i);
    }
}//prints out 0124, continue moves to the next iteration skipping printing 3

public static void main(String[] args) {
    for(int i = 0; i < 5; i++){
        if (i == 3) {
            break;
        }
        System.out.print(i);
    }
}//prints out 012, break moves out of the loop hence doesnt print 3 and 4

4

Pertimbangkan yang berikut ini:

int n;
for(n = 0; n < 10; ++n) {
    break;
}
System.out.println(n);

break menyebabkan loop berakhir dan nilai n adalah 0.

int n;
for(n = 0; n < 10; ++n) {
    continue;
}
System.out.println(n);

melanjutkan menyebabkan penghitung program untuk kembali ke baris pertama dari loop (kondisi diperiksa dan nilai n bertambah) dan nilai akhir n adalah 10.

Perlu dicatat juga bahwa break hanya menghentikan eksekusi loop yang ada di dalamnya:

int m;
for(m = 0; m < 5; ++m)
{
    int n;
    for(n = 0; n < 5; ++n) {
        break;
    }
    System.out.println(n);
}
System.out.println(m);

Akan menampilkan sesuatu dengan efek

0
0
0
0
0
5

1
Anda memiliki masalah pelingkupan variabel dalam contoh Anda.
Darron

3

The breakpernyataan istirahat keluar dari loop (pernyataan berikutnya yang akan dieksekusi adalah yang pertama setelah brace penutupan), sedangkan continuedimulai loop lebih pada iterasi berikutnya.


2

The breakpernyataan ada struktur kontrol perulangan saat ini dan melompat di belakangnya sementara continuekeluar juga, tapi melompat kembali ke kondisi perulangan.


2

Contoh sederhana:

break meninggalkan loop.

int m = 0;
for(int n = 0; n < 5; ++n){
  if(n == 2){
    break;
  }
  m++;
}

System.out.printl("m:"+m); // m:2

continue akan kembali untuk memulai loop.

int m = 0;
for(int n = 0; n < 5; ++n){
  if(n == 2){
    continue; // Go back to start and dont execute m++
  }
  m++;
}

System.out.printl("m:"+m); // m:4

2

Untuk mencegah segala sesuatu dari eksekusi jika suatu kondisi terpenuhi seseorang harus menggunakan melanjutkan dan untuk keluar dari loop jika suatu kondisi terpenuhi seseorang harus menggunakan istirahat.

Misalnya dalam kode yang disebutkan di bawah ini.

 for(int i=0;i<5;i++){

        if(i==3){

           continue;

        }
       System.out.println(i);
     }

Kode di atas akan mencetak hasilnya: 0 1 2 4

Sekarang pertimbangkan kode ini

 for(int i=0;i<5;i++){


            if(i==3){

                break;

            }
            System.out.println(i);
         }

Kode ini akan mencetak 0 1 2

Itulah perbedaan mendasar dalam melanjutkan dan memecah.


1

inilah semantik istirahat:

int[] a = new int[] { 1, 3, 4, 6, 7, 9, 10 };
// find 9
for(int i = 0; i < a.Length; i++)
{
    if (a[i] == 9) 
        goto goBreak;

    Console.WriteLine(a[i].ToString());      
}
goBreak:;

inilah semantik dari melanjutkan:

int[] a = new int[] { 1, 3, 4, 6, 7, 9, 10 };
// skip all odds
for(int i = 0; i < a.Length; i++)
{
    if (a[i] % 2 == 1) 
        goto goContinue;

    Console.WriteLine(a[i].ToString());      

goContinue:;
}

Tidak memiliki C # yang rusak; dan melanjutkan; pernyataan? Saya tidak bisa mempercayainya.
OscarRyz

Ya C # memiliki, saya hanya menjelaskan semantik istirahat dan melanjutkan :-)
Michael Buen

1
Anda tidak dapat menjelaskan apa pun, Anda hanya memposting beberapa kode. Kode bahkan tidak berkomentar. Sepotong kode bukanlah penjelasan, atau 'semantik'.
Marquis of Lorne

1

Pertama, saya pikir Anda harus tahu bahwa ada dua jenis istirahat dan melanjutkan di Jawa yang berlabel istirahat, istirahat tidak berlabel, berlabel terus dan berlabel melanjutkan. Sekarang, saya akan berbicara tentang perbedaan di antara mereka.

class BreakDemo {
public static void main(String[] args) {

    int[] arrayOfInts = 
        { 32, 87, 3, 589,
          12, 1076, 2000,
          8, 622, 127 };
    int searchfor = 12;

    int i;
    boolean foundIt = false;

    for (i = 0; i < arrayOfInts.length; i++) {
        if (arrayOfInts[i] == searchfor) {
            foundIt = true;
            break;//this is an unlabeled break,an unlabeled break statement terminates the innermost switch,for,while,do-while statement.
        }
    }

    if (foundIt) {
        System.out.println("Found " + searchfor + " at index " + i);
    } else {
        System.out.println(searchfor + " not in the array");
    }
}

Pernyataan istirahat yang tidak berlabel mengakhiri sakelar terdalam, untuk, sementara, pernyataan do-while.

public class BreakWithLabelDemo {
public static void main(String[] args) {
    search:
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 5; j++) {
            System.out.println(i + " - " + j);
            if (j == 3)
                break search;//this is an labeled break.To notice the lab which is search.
        }
    }
}

Istirahat berlabel mengakhiri pernyataan luar. Jika Anda javac dan java demo ini, Anda akan mendapatkan:

0 - 0
0 - 1
0 - 2
0 - 3
class ContinueDemo {
public static void main(String[] args) {

    String searchMe = "peter piper picked a " + "peck of pickled peppers";
    int max = searchMe.length();
    int numPs = 0;

    for (int i = 0; i < max; i++) {
        // interested only in p's
        if (searchMe.charAt(i) != 'p')
            continue;//this is an unlabeled continue.

        // process p's
        numPs++;
    }
    System.out.println("Found " + numPs + " p's in the string.");
}

Pernyataan melanjutkan yang tidak berlabel akan melompati iterasi saat ini dari pernyataan for, while, do-while.

public class ContinueWithLabelDemo {
public static void main(String[] args) {
    search:
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 5; j++) {
            System.out.println(i + " - " + j);
            if (j == 3)
                continue search;//this is an labeled continue.Notice the lab which is search
        }
    }
}

Pernyataan lanjut berlabel melewatkan iterasi saat ini dari loop luar yang ditandai dengan label yang diberikan, jika Anda javac dan java demo, Anda akan mendapatkan:

0 - 0
0 - 1
0 - 2
0 - 3
1 - 0
1 - 1
1 - 2
1 - 3
2 - 0
2 - 1
2 - 2
2 - 3

jika Anda memiliki pertanyaan, Anda dapat melihat tutorial Java ini: masukkan deskripsi tautan di sini


0

Sederhananya: break akan mengakhiri loop saat ini, dan melanjutkan eksekusi pada baris pertama setelah loop berakhir. terus melompat kembali ke kondisi loop dan terus menjalankan loop.


Pada pernyataan pertama setelah loop.
Marquis of Lorne

0
for (int i = 1; i <= 3; i++) {
        if (i == 2) {

            continue;
        }
        System.out.print("[i:" + i + "]");

coba kode ini di netbeans Anda akan mengerti perbedaan antara break dan continue

for (int i = 1; i <= 3; i++) {
        if (i == 2) {

            break;
        }
        System.out.print("[i:" + i + "]");

0

Program sederhana untuk memahami perbedaan antara melanjutkan dan istirahat

Kapan continuedigunakan

    public static void main(String[] args) {
    System.out.println("HelloWorld");
    for (int i = 0; i < 5; i++){
        System.out.println("Start For loop i = " + i);
        if(i==2){
            System.out.println("Inside if Statement for i = "+i);
           continue;
        }
        System.out.println("End For loop i = " + i);
    }
    System.out.println("Completely out of For loop");
}


OutPut:
HelloWorld
Start For loop i = 0
End For loop i = 0
Start For loop i = 1
End For loop i = 1
Start For loop i = 2
Inside if Statement for i = 2
Start For loop i = 3
End For loop i = 3
Start For loop i = 4
End For loop i = 4
Completely out of For loop

Kapan breakdigunakan

public static void main(String[] args) {
    System.out.println("HelloWorld");
    for (int i = 0; i < 5; i++){
        System.out.println("Start For loop i = " + i);
        if(i==2){
            System.out.println("Inside if Statement for i = "+i);
           break;
        }
        System.out.println("End For loop i = " + i);
    }
    System.out.println("Completely out of For loop");
}

Output:
HelloWorld
Start For loop i = 0
End For loop i = 0
Start For loop i = 1
End For loop i = 1
Start For loop i = 2
Inside if Statement for i = 2
Completely out of For loop

0

Lanjutkan Statment, hentikan itration dan mulai ittration berikutnya Ex:

System.out.println("continue when i is 2:");
    for (int i = 1; i <= 3; i++) {
        if (i == 2) {
            System.out.print("[continue]");
            continue;
        }
        System.out.print("[i:" + i + "]");
    }

dan Break Statment menghentikan loop atau Keluar dari loop


-1

jadi Anda berada di dalam for atau while loop. Menggunakan istirahat; akan menempatkan Anda di luar lingkaran. Seperti dalam, itu akan berakhir. Terus; akan memintanya untuk menjalankan iterasi berikutnya.

Tidak ada gunanya menggunakan lanjutkan jika pernyataan, tetapi istirahat; berguna. Dalam switch ... case, selalu gunakan break; untuk mengakhiri suatu kasus, sehingga tidak mengeksekusi kasus lain.


1
"Tidak ada gunanya menggunakan lanjutkan jika pernyataan" - Ya, itu masuk akal. Misalnya, ketika suatu kondisi terpenuhi, Anda dapat melewati beberapa bagian pemrosesan pada langkah iterasi yang sebenarnya.
Sk8erPeter

Hal ini tidak hanya sia-sia tapi ilegal, kecuali yang ifada di dalam loop, dalam hal ini ada banyak titik.
Marquis of Lorne
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.