use break para sair de um laço
É possível forçar a saída imediata de um laço com a instrução break.
Ignora o código restante no corpo do laço e o teste condicional.
Quando uma instrução break é encontrada dentro de um laço, este é encerrado.
O controle do programa é retomado na instrução posterior ao laço.
Esse programa gera a saída a seguir:
0 1 2 3 4 5 6 7 8 9 Loop complete.Embora o laço for tenha sido projetado para ir de 0 a num (que nesse caso é 100), a instrução break encerra-o prematuramente, quando i ao quadrado é maior ou igual a num.
A instrução break pode ser usada com qualquer laço Java, inclusive os intencionalmente infinitos.
Exemplo: o programa abaixo apenas lê a entrada até o
usuário digitar a letra q.
- Quando usada dentro de um conjunto de laços aninhados, a instrução break encerra apenas o laço mais interno.
Saída:
Outer loop count: 0
Inner loop count: 0 1 2 3 4 5 6 7 8 9
Outer loop count: 1
Inner loop count: 0 1 2 3 4 5 6 7 8 9
Outer loop count: 2
Inner loop count: 0 1 2 3 4 5 6 7 8 9
Loops complete.
A instrução break no laço mais interno encerra apenas esse laço.
O laço externo não é afetado pela instrução break do laço interno.
Mais de uma instrução break pode aparecer em um laço.
Muitas instruções break podem desestruturar o código.
O break que termina uma instrução switch só afeta a instrução switch, não os laços externos.
Use break como uma forma de goto
A instrução break pode ser usada individualmente para fornecer uma alternativa ao goto.
Java não tem instrução goto devido à sua forma desestruturada de alterar o fluxo de execução.
Programas com amplo uso de goto são difíceis de compreender e manter.
goto pode ser útil na saída de conjuntos de laços profundamente aninhados.
Java define uma forma expandida da instrução break para tratar essas situações.
A forma expandida de break pode sair de um ou mais blocos de código, rotulados.
Blocos rotulados não precisam fazer parte de um laço ou switch.
A forma geral da instrução break rotulada:
break rótulo;O rótulo é o nome que identifica um bloco de código.
A instrução break rotulada transfere o controle para fora do bloco rotulado.
O bloco rotulado deve incluir a instrução break, mas não precisa ser o bloco imediatamente externo.
Um rótulo é um identificador Java válido seguido por dois pontos.
A instrução break rotulada retoma a execução no fim do bloco rotulado.
Saída:
i is 1
After block one.
i is 2
After block two.
After block one.
i is 3
After block three.
After block two.
After block one.
After for.
Quando i é igual a 1:
A primeira instrução if é bem-sucedida.
O break ocorre no fim do bloco rotulado one.
A mensagem "After block one." é exibida.Quando i é igual a 2:
A segunda instrução if é bem-sucedida.
O controle é transferido para o fim do bloco rotulado two.
As mensagens "After block two." e "After block one." são exibidas nessa ordem.Quando i é igual a 3:
A terceira instrução if é bem-sucedida.
O controle é transferido para o fim do bloco rotulado three.
As três mensagens "After block three.", "After block two.", e "After block one." são exibidas.Em outro exemplo:
O break é usado para sair de uma série de laços for aninhados.
Quando a instrução break do laço interno é executada, o controle do programa salta para o fim do bloco rotulado done.
Os outros três laços são ignorados.
Saída:
0
1
2
3
4
5
After i loop
Este código usa break com um rótulo para sair de três laços aninhados quando k atinge 5.
É importante o local exato onde um rótulo é inserido – principalmente no trabalho com laços.
Saída:
x and y: 0 0
x and y: 0 1
x and y: 0 0
x and y: 0 1
x and y: 1 0
x and y: 1 1
x and y: 2 0
x and y: 2 1
x and y: 3 0
x and y: 3 1
x and y: 4 0
x and y: 4 1
Neste código, stop1 é um rótulo associado ao primeiro conjunto de laços for, enquanto stop2 é um rótulo associado a um bloco de código interno ao segundo conjunto de laços for.
No primeiro conjunto de laços aninhados, o rótulo precede o laço for externo.
O break com o rótulo stop1 transfere o controle para o fim do bloco for inteiro.
Isso salta as iterações restantes do laço externo.
No segundo conjunto de laços aninhados, o rótulo precede a chave de abertura do bloco for externo.
O break stop2 transfere o controle para o fim do bloco for externo.
A próxima iteração do laço externo ocorre após o break.
É importante definir um rótulo antes de usar a instrução break com ele.
Não é possível usar break com um rótulo que não foi definido para um bloco que a inclua.
Exemplo ( o programa abaixo é inválido e não será compilado)
- Já que o laço rotulado com one não inclui a instrução break, não é possível transferir o controle para esse bloco.