A declaração do break
Como você viu ao trabalhar com instruções switch, uma instrução break transfere o fluxo de controle para a declaração anexa. O mesmo vale para declarações de break que aparecem dentro do while , do-while e for loops, terminando o loop mais cedo, como mostrado na Figura 2.9
Observe na Figura 2.9 que a instrução break pode ter um parâmetro de etiqueta opcional.
Sem um parâmetro label, a instrução break terminará o loop interno mais próximo atualmente no processo de execução. O parâmetro de etiqueta opcional nos permite sair de um loop externo de nível superior. No exemplo a seguir, procuramos pela primeira matriz (x , y) posição de índice de um número dentro de uma matriz bidimensional não classificada:
public class SearchSample { public static void main(String[] args) { int[][] list = {{1,13,5},{1,2,5},{2,7,2}}; int searchValue = 2; int positionX = -1; int positionY = -1; PARENT_LOOP: for(int i=0; i<list.length; i++) { for(int j=0; j<list[i].length; j++) { if(list[i][j]==searchValue) { positionX = i; positionY = j; break PARENT_LOOP; } } } if(positionX==-1 || positionY==-1) { System.out.println("Value "+searchValue+" not found"); } else { System.out.println("Value "+searchValue+" found at: " + "("+positionX+","+positionY+")"); } }}Quando executado, este código irá gerar:
Value 2 found at: (1,1)Em particular, dê uma olhada na quebra de declaração PARENT_LOOP . Esta afirmação vai quebrar toda a estrutura de loop, assim que o primeiro valor correspondente for encontrado. Agora imagine o que aconteceria se substituíssemos o corpo do laço interno pelo seguinte:
if(list[i][j]==searchValue) { positionX = i; positionY = j; break;}Como isso mudaria nosso fluxo e a saída? Em vez de sair quando o primeiro valor correspondente for encontrado, o programa agora só sairá do loop interno quando a condição é satisfeita. Em outras palavras, a estrutura agora encontrará o primeiro valor correspondente do último loop interno que contém o valor, resultando na seguinte saída:
Value 2 found at: (2,0)Finalmente, e se removêssemos o intervalo completamente?
if(list[i][j]==searchValue) { positionX = i; positionY = j;}Neste caso, o código irá procurar o último valor em toda a estrutura que tem o valor de correspondência. A saída ficará assim:
Value 2 found at: (2,2)Você pode ver neste exemplo que usar um rótulo em uma instrução break em um loop aninhado, ou não usar a instrução break, pode fazer com que a estrutura do loop se comporte diferente.