Nesta aula, vamos explorar como utilizar a instrução break com loops for para controlar o fluxo de execução e interromper a iteração quando certas condições são atendidas.
Relembrando:
A instrução break é usada para sair imediatamente de um loop, mesmo que a condição de parada não tenha sido atingida.
public class ForComBreak {
public static void main(String[] args) {
// Exemplo: Contagem de 1 a 10, mas interrompendo ao chegar em 5
System.out.println("Contagem até encontrar o número 5:");
for (int i = 1; i <= 10; i++) {
System.out.print(i + " ");
if (i == 5) {
System.out.println("\nEncontrei o 5! Saindo do loop...");
break; // Sai do loop quando i é igual a 5
}
}
System.out.println("Loop encerrado!");
}
}
Contagem até encontrar o número 5:
1 2 3 4 5
Encontrei o 5! Saindo do loop...
Loop encerrado!
Dica: O break é útil quando você está procurando algo específico em um conjunto de dados e, ao encontrá-lo, não precisa continuar a iteração.
Uma aplicação comum do break com for é a busca de elementos em um array:
public class BuscaEmArray {
public static void main(String[] args) {
// Array de números
int[] numeros = {15, 32, 67, 89, 43, 28, 71, 56, 92, 10};
// Número a ser buscado no array
int busca = 43;
int posicao = -1; // -1 indica que o elemento não foi encontrado
// Procurando o número no array
System.out.println("Procurando o número " + busca + " no array:");
for (int i = 0; i < numeros.length; i++) {
System.out.print("Verificando posição " + i + ": " + numeros[i]);
if (numeros[i] == busca) {
System.out.println(" - Encontrado!");
posicao = i;
break; // Sai do loop ao encontrar o número
} else {
System.out.println(" - Diferente!");
}
}
// Verificando o resultado da busca
if (posicao != -1) {
System.out.println("\nO número " + busca + " foi encontrado na posição " + posicao);
} else {
System.out.println("\nO número " + busca + " não foi encontrado no array");
}
// Buscando um número que não existe no array
busca = 100;
posicao = -1;
System.out.println("\nProcurando o número " + busca + " no array:");
for (int i = 0; i < numeros.length; i++) {
if (numeros[i] == busca) {
posicao = i;
break;
}
}
if (posicao != -1) {
System.out.println("O número " + busca + " foi encontrado na posição " + posicao);
} else {
System.out.println("O número " + busca + " não foi encontrado no array");
}
}
}
Procurando o número 43 no array:
Verificando posição 0: 15 - Diferente!
Verificando posição 1: 32 - Diferente!
Verificando posição 2: 67 - Diferente!
Verificando posição 3: 89 - Diferente!
Verificando posição 4: 43 - Encontrado!
O número 43 foi encontrado na posição 4
Procurando o número 100 no array:
O número 100 não foi encontrado no array
Eficiência: Usar o break para sair do loop assim que o elemento é encontrado é mais eficiente do que percorrer todo o array, especialmente em conjuntos de dados grandes.
Outra aplicação útil do break com for é na verificação de números primos:
public class VerificacaoPrimo {
public static void main(String[] args) {
// Verificando se um número é primo
int numero = 17;
boolean ehPrimo = true; // Assumimos inicialmente que é primo
// Casos especiais: números menores ou iguais a 1 não são primos
if (numero <= 1) {
ehPrimo = false;
} else {
// Verificando divisibilidade por números de 2 até a raiz quadrada do número
int raiz = (int) Math.sqrt(numero);
for (int i = 2; i <= raiz; i++) {
System.out.println("Verificando se " + numero + " é divisível por " + i);
if (numero % i == 0) {
// Se for divisível por algum número, não é primo
System.out.println(numero + " é divisível por " + i + " = " + (numero / i));
ehPrimo = false;
break; // Não precisa continuar verificando
}
}
}
// Exibindo o resultado
if (ehPrimo) {
System.out.println("\n" + numero + " é um número primo!");
} else {
System.out.println("\n" + numero + " não é um número primo!");
}
// Verificando outro número
numero = 15;
ehPrimo = true;
if (numero <= 1) {
ehPrimo = false;
} else {
int raiz = (int) Math.sqrt(numero);
for (int i = 2; i <= raiz; i++) {
System.out.println("Verificando se " + numero + " é divisível por " + i);
if (numero % i == 0) {
System.out.println(numero + " é divisível por " + i + " = " + (numero / i));
ehPrimo = false;
break;
}
}
}
if (ehPrimo) {
System.out.println("\n" + numero + " é um número primo!");
} else {
System.out.println("\n" + numero + " não é um número primo!");
}
}
}
Verificando se 17 é divisível por 2
Verificando se 17 é divisível por 3
Verificando se 17 é divisível por 4
17 é um número primo!
Verificando se 15 é divisível por 2
Verificando se 15 é divisível por 3
15 é divisível por 3 = 5
15 não é um número primo!
Otimização: Usar break permite parar a verificação assim que encontramos um divisor, tornando o algoritmo mais eficiente. Não precisamos continuar verificando depois de descobrir que um número não é primo.
Por padrão, o break afeta apenas o loop mais interno. Para sair de loops aninhados, você pode usar rótulos (labels):
public class BreakLoopsAninhados {
public static void main(String[] args) {
// Exemplo de break em loops aninhados sem rótulo
System.out.println("Break sem rótulo:");
for (int i = 1; i <= 3; i++) {
System.out.println("Loop externo: i = " + i);
for (int j = 1; j <= 3; j++) {
System.out.println(" Loop interno: j = " + j);
if (j == 2) {
System.out.println(" Encontrado j = 2! Break aplicado.");
break; // Sai apenas do loop interno
}
}
}
// Exemplo de break em loops aninhados com rótulo
System.out.println("\nBreak com rótulo:");
outerLoop: // Rótulo para o loop externo
for (int i = 1; i <= 3; i++) {
System.out.println("Loop externo: i = " + i);
for (int j = 1; j <= 3; j++) {
System.out.println(" Loop interno: j = " + j);
if (i == 2 && j == 2) {
System.out.println(" Encontrado i = 2 e j = 2! Break aplicado ao loop externo.");
break outerLoop; // Sai do loop externo (rotulado)
}
}
}
}
}
Break sem rótulo:
Loop externo: i = 1
Loop interno: j = 1
Loop interno: j = 2
Encontrado j = 2! Break aplicado.
Loop externo: i = 2
Loop interno: j = 1
Loop interno: j = 2
Encontrado j = 2! Break aplicado.
Loop externo: i = 3
Loop interno: j = 1
Loop interno: j = 2
Encontrado j = 2! Break aplicado.
Break com rótulo:
Loop externo: i = 1
Loop interno: j = 1
Loop interno: j = 2
Loop interno: j = 3
Loop externo: i = 2
Loop interno: j = 1
Loop interno: j = 2
Encontrado i = 2 e j = 2! Break aplicado ao loop externo.
Cuidado: O uso excessivo de rótulos e breaks pode tornar o código difícil de entender e manter. Use-os com moderação e sempre documente claramente o seu propósito.
Um exemplo prático de uso de break com for é encontrar o primeiro elemento comum em dois arrays:
for-each aninhado: o laço
externo percorre array1 (variável
num1) e, para cada elemento, o laço interno
percorre array2 (variável num2)
procurando uma correspondência. Ao encontrar, o
return sai imediatamente da função.
public class ElementoComum {
public static void main(String[] args) {
// Dois arrays de números
int[] array1 = {3, 7, 12, 9, 4, 15, 8};
int[] array2 = {2, 10, 4, 6, 9, 11};
int elementoComum = -1; // -1 indica que nenhum elemento comum foi encontrado
// Procurando o primeiro elemento comum
outerLoop: // Rótulo para o loop externo
for (int i = 0; i < array1.length; i++) {
for (int j = 0; j < array2.length; j++) {
if (array1[i] == array2[j]) {
elementoComum = array1[i];
System.out.println("Elemento comum encontrado: " + elementoComum);
System.out.println("Posição no array1: " + i);
System.out.println("Posição no array2: " + j);
break outerLoop; // Sai de ambos os loops
}
}
}
// Verificando o resultado
if (elementoComum == -1) {
System.out.println("Nenhum elemento comum encontrado nos arrays.");
}
// Versão otimizada usando um método separado
System.out.println("\nUsando método para encontrar elemento comum:");
int resultado = encontrarElementoComum(array1, array2);
if (resultado != -1) {
System.out.println("Primeiro elemento comum: " + resultado);
} else {
System.out.println("Nenhum elemento comum encontrado.");
}
}
// Método para encontrar o primeiro elemento comum entre dois arrays
public static int encontrarElementoComum(int[] array1, int[] array2) {
for (int num1 : array1) {
for (int num2 : array2) {
if (num1 == num2) {
return num1; // Retorna imediatamente ao encontrar
}
}
}
return -1; // Nenhum elemento comum encontrado
}
}
Elemento comum encontrado: 4
Posição no array1: 4
Posição no array2: 2
Usando método para encontrar elemento comum:
Primeiro elemento comum: 4
Você pode combinar break e continue em um loop for para controle de fluxo mais sofisticado:
public class ForBreakContinue {
public static void main(String[] args) {
// Array de números
int[] numeros = {12, 5, 8, 3, 10, 15, 7, 20, 9};
// Exemplo 1: Imprimindo números até encontrar o valor 15
System.out.println("Números até encontrar o 15:");
for (int numero : numeros) {
if (numero == 15) {
System.out.println("Encontrei o 15! Parando...");
break;
}
System.out.print(numero + " ");
}
// Exemplo 2: Imprimindo apenas números pares, parando no primeiro valor maior que 15
System.out.println("\n\nNúmeros pares até encontrar valor > 15:");
for (int numero : numeros) {
// Para no primeiro valor maior que 15
if (numero > 15) {
System.out.println("\nEncontrei valor > 15: " + numero + "! Parando...");
break;
}
// Pula números ímpares
if (numero % 2 != 0) {
continue; // Pula para a próxima iteração
}
System.out.print(numero + " ");
}
// Exemplo 3: Soma dos números até atingir um limite
int soma = 0;
int limite = 30;
System.out.println("\n\nSomando números até atingir ou ultrapassar " + limite + ":");
for (int numero : numeros) {
soma += numero;
System.out.println("Adicionando " + numero + ": Soma atual = " + soma);
if (soma >= limite) {
System.out.println("Limite atingido! Parando...");
break;
}
}
}
}
Números até encontrar o 15:
12 5 8 3 10 Encontrei o 15! Parando...
Números pares até encontrar valor > 15:
12 8 10
Encontrei valor > 15: 20! Parando...
Somando números até atingir ou ultrapassar 30:
Adicionando 12: Soma atual = 12
Adicionando 5: Soma atual = 17
Adicionando 8: Soma atual = 25
Adicionando 3: Soma atual = 28
Adicionando 10: Soma atual = 38
Limite atingido! Parando...
Alternativa ao break: Em vez de usar break em um método, você pode simplesmente usar return para sair do método e retornar um valor quando a condição desejada for atendida.
Teste seus conhecimentos sobre o uso de for com break:
Reforce o conteúdo desta aula com mais dois exercícios práticos: