Mudanças entre as edições de "Pensamento Computacional - Comandos de controle de fluxo no Java: break e continue"
Linha 55: | Linha 55: | ||
flag = false; | flag = false; | ||
} | } | ||
− | if ( flag ) | + | if ( flag ) { |
− | System.out.println("O loop acima terminou normalmente | + | System.out.println("O loop acima terminou normalmente"); |
− | else | + | System.out.println("A condição de saída foi i < 5"); |
− | System.out.println("O loop acima encerrou normalmente | + | } else |
− | + | System.out.println("O loop acima encerrou normalmente"); | |
+ | System.out.println("A condição de saída é flag falso (ou ambos)"); | ||
} | } | ||
} | } |
Edição das 08h56min de 19 de outubro de 2023
Comando break
Sintaxe e Semântica
Muitas vezes deseja-se que o um determinado loop seja interrompido sem que este encerramento seja feito pela condição colocada no comando de decisão. O break leva a um encerramento de forma atípica do loop.
O exemplo a seguir demonstra o uso do break e é puramente demonstrativo. O comando se resume ao uso da palavra reservada "break". O programa faz a leitura de 5 números inteiros. Caso o número seja igual ao "valor de i" (número do laço), o programa se encerra pelo break, caso contrário, o encerramento é pela expressão 2 do for (a condição de teste).
Notar que o break é usado normalmente para encerramentos "atípicos" de um loop. Normalmente, se esperaria que o loop se encerrasse normalmente, mas uma condição extra leva ao encerramento do loop.
import java.util.Scanner;
public class ComandoFor {
public static void main(String[] args) {
int i, numero;
Scanner teclado = new Scanner(System.in);
for ( i = 0; i < 5; i = i + 1 ){
System.out.println("Laço de número " + i);
System.out.println("Entre com um número ");
numero = teclado.nextInt();
if ( i == numero )
break;
}
if ( i == 5 )
System.out.println("O loop acima terminou normalmente");
else
System.out.println("O loop acima encerrou pelo break");
}
}
Observe o detalhe da saída:
Notar que é possível (mas muitas vezes complexo), manter uma saída normal pela condição do comando de repetição. Normalmente, uma variável indicadora pode ser usada como apoio. Veja o exemplo seguinte:
import java.util.Scanner;
public class ComandoBreak {
public static void main(String[] args) {
int i, numero;
boolean flag;
Scanner teclado = new Scanner(System.in);
for ( i = 0, flag = true; (i < 5) && flag ; i = i + 1 ){
System.out.println("Laço de número " + i);
System.out.println("Entre com um número ");
numero = teclado.nextInt();
if ( i == numero )
flag = false;
}
if ( flag ) {
System.out.println("O loop acima terminou normalmente");
System.out.println("A condição de saída foi i < 5");
} else
System.out.println("O loop acima encerrou normalmente");
System.out.println("A condição de saída é flag falso (ou ambos)");
}
}
Neste exemplo eliminou-se o uso do break usando a variável booleana flag como apoio. Observe que a expressão 2 do comando for ficou um pouco mais complexa.
break funciona com qualquer comando de repetição
É importante notar que o comando break pode ser usado com qualquer comando de repetição. A semântica é a mesma discutida: o loop é imediatamente encerrado.
Exercício 1
Implementar um programa Java para fazer a média de até N números inteiros a serem fornecidos pelo usuário. Somente números acima de zero devem ser considerados. Caso um número igual ou inferior a zero seja fornecido, o loop deve se encerrar. Use o comando for() e break. A média dos números fornecidos deve ser calculada no final.
Exercício 2
Repita o exercício anterior usando o comando while().
Exercício 3
Refaça o programa de adivinhação usando o comando "do while()" com loop eterno. A saída do loop deve ser realizada pela execução de um comando break.
DISCUSSÃO; Será que a implementação com break é mais eficiente em termos de tempo de execução?
Comando continue
O comando continue força o término de um laço do loop.
import java.util.Scanner;
public class ComandoFor {
public static void main(String[] args) {
int i;
for ( i=0; i < 10; i = i + 1 )
System.out.println("Valor de i é " + i);
if ( i == 5 )
continue;
}
}