Break para sair de um laço
Tags: java
Published: 2024-07-16 16:36:04

**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.

Exemplo:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/eq9x9eujvn35ehdskl77.png)

- 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.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r48tmtaf8top2g67pw1s.png)

-  Quando usada dentro de um conjunto de laços aninhados, a instrução break encerra apenas o laço mais interno.

Exemplo:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/i40dkg27ygpl4phgw2km.png)

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.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0zfdtkuwk2ikr8n8aj2b.png)

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.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3dzbi8518mjvicyt4qbn.png)

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.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8cwpz76n28ebtu3us2ze.png)

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)

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/og6c5763k3do44bdgqtv.png)

- 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.