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( "" );