Instrukcje break i continue

 

Instrukcja break bez etykiety

Instrukcja break bez etykiety kończy natychmiast działanie instrukcji warunkowych switch lub pętli for, while oraz do-while, przenosząc sterowanie do pierwszej instrukcji występującej po instrukcji warunkowej lub pętli.

int i;
for( i = 0; i < 5; i++ ) {
    if( i >= 2 ) {
        break;
    }
    System.out.println( "W pętli - i = " + i );
}
System.out.println( "PO pętli - i = " + i );

// Output:
// W pętli - i = 0
// W pętli - i = 1
// PO pętli - i = 2

 

Instrukcja break z etykietą (labeled break)

Instrukcja break z etykietą - gdzie etykietą jest słowo z dwukropkiem ustawione przed zewnętrznym blokiem warunkowym - kończy natychmiast działanie jednej lub wielu zagnieżdżonych ("wewnętrznych") instrukcji warunkowych switch lub pętli for, while oraz do-while, przenosząc sterowanie do pierwszej instrukcji występującej po zewnętrznym bloku warunkowym lub pętli, przed którą bezpośrednio występuje dana etykieta.

outer:
while (true)
{
   System.out.println( "Start" );
   while (true)
   {
      System.out.println("Naciśnij n - \"nowy obieg\" lub k - \"koniec\".");
      int ch = System.in.read();
      if (ch == 'n')
         break;
      if (ch == 'q')
         break outer;
   }
}

 

Instrukcja continue bez etykiety

Instrukcja continue bez etykiety pomija pozostałą część kodu w bieżącym obiegu pętli warunkowej i rozpoczyna kolejny obieg tej pętli.

for( int i=-2; i<=2; i++ ) 
   if (i == 0)
      continue;
   else
      System.out.println( 10/i );

Program iteruje po wartościach z zakresu od -2 do 2 i wyświetla wartość dzielenia 10 przez bieżącą wartość, ale pomija dzielenie przez 0.

 

Drugi przykład:

int i;
for( i = 0; i < 5; i++ ) {
    if( i >= 3 ) {
        break;
    }
    System.out.println( "W pętli - i = " + i );
    if( i >= 1 ) {
        continue;
    }
    System.out.println( "W pętli 2 ------ i = " + i );
}
System.out.println( "PO pętli - i = " + i );

// Output:
// W pętli - i = 0
// W pętli 2 ------ i = 0
// W pętli - i = 1
// W pętli - i = 2
// PO pętli - i = 3

 

Instrukcja continue z etykietą (labeled continue)

Instrukcja continue z etykietą pomija pozostałą część kodu w bieżącym obiegu jednej lub wielu zagnieżdżonych pętli warunkowych i rozpoczyna kolejny obieg pętli zewnętrznej, przed którą występuje określona etykieta (nazwa z dwukropkiem).

 

 

Przykład bardziej zaawansowanego wykorzystania instrukcji break, break z etykietą oraz continue z etykietą:

class ZgadnijCyfrę {
   public static void main(String[] args) throws Exception {
      outer:
      while( true )
      {
         System.out.println( "Zgadnij wylosowaną cyfrę..." );
         int number = (int) ( Math.random() * 10 );

         while( true )
         {
            int userNumber;
            while( true )
            {
               System.out.print( "Podaj cyfrę: " );
               userNumber = System.in.read();
               while( System.in.read() != '\n' );
               if( userNumber >= '0' && userNumber <= '9' )
               {
                  userNumber -= '0';
                  break;
               }
            }
            if( userNumber < number )
               System.out.println( "Za mała..." );
            else
            if( userNumber > number ) 
               System.out.println( "Za duża..." );
            else
            {
               System.out.println( "Brawo! To właśnie ta cyfra. " );
               while( true )
               {
                  System.out.println("Naciśnij n - (nowa gra) lub k - (koniec).");
                  int ch = System.in.read();
                  while (System.in.read() != '\n');
                  if (ch == 'n')
                     continue outer;
                  if (ch == 'k')
                     break outer;
               }
            }
         }
      }
   }
}

Dodatkowy przykład, w którym break buba robi dokładnie to samo, co contunue outer:


outer:
while( true) {
	buba:
	while(true) {
		while (true)
		{
		   System.out.println( "Start" );
		   while (true)
		   {
		      System.out.println("Naciśnij n - \"nowy obieg\" lub k - \"koniec\".");
		      int ch = System.in.read();
		      if (ch == 'n')
		         continue;
		      if (ch == 'x')
		         break buba;
		      if (ch == 'q')
		         continue outer;
		   }
		}
	}
}

System.out.println( "" );