Mudanças entre as edições de "Pensamento Computacional - Comandos de controle de fluxo no Java: break e continue"
(Criou página com '=Comando break= 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. Norma...') |
|||
(31 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
=Comando break= | =Comando break= | ||
− | + | ==Sintaxe e Semântica== | |
− | O exemplo a seguir demonstra o uso do break | + | <blockquote style="background: #DCF4CC; border: 1px solid black; padding: 1em;"> |
+ | 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 comando "break" leva a um encerramento de forma atípica do loop. | ||
+ | </blockquote> | ||
+ | |||
+ | 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. | ||
<syntaxhighlight lang=java> | <syntaxhighlight lang=java> | ||
import java.util.Scanner; | import java.util.Scanner; | ||
− | public class | + | public class ComandoForBreak { |
public static void main(String[] args) { | public static void main(String[] args) { | ||
− | int i; | + | int i, numero; |
− | + | Scanner teclado = new Scanner(System.in); | |
− | for ( i=0; i < | + | |
− | System.out.println(" | + | for ( i = 0; i < 5; i = i + 1 ){ |
− | if ( i == | + | System.out.println("Laço de número " + i); |
+ | System.out.println("Entre com um número "); | ||
+ | numero = teclado.nextInt(); | ||
+ | if ( i == numero ) | ||
break; | break; | ||
+ | } | ||
+ | if ( i == 5 ) | ||
+ | System.out.println("O loop acima terminou normalmente"); | ||
+ | else | ||
+ | System.out.println("O loop acima encerrou pelo break"); | ||
+ | |||
} | } | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | Observe o detalhe da saída: | ||
− | ==Exercício== | + | [[imagem:ALG-ComandoBreak.png|450px]] |
+ | |||
+ | 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: | ||
+ | |||
+ | <syntaxhighlight lang=java> | ||
+ | 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)"); | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 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. | 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= | ||
+ | |||
+ | ==Sintaxe e Semântica== | ||
+ | |||
+ | O comando "continue" força o término de um laço do loop mas não encerra o loop. Observe o exemplo abaixo. | ||
+ | |||
+ | <syntaxhighlight lang=java> | ||
+ | <syntaxhighlight lang=java> | ||
+ | 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 ) | ||
+ | continue; | ||
+ | System.out.println("O número" + numero + "não coincidiu com o número do laço... "); | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | Para a condição i==numero o fluxo de execução é forçado pelo comando continue a voltar para exp3 do comando for seguindo a semântica "normal" | ||
+ | |||
+ | ==Exercício 4== | ||
+ | |||
+ | 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 continuar normalmente, sendo considerados somente os números positivos para computação da média. Use o comando for() e continue. A média dos números fornecidos deve ser calculada no final. | ||
+ | |||
+ | =Combinando o break e continue para consolidar a diferença= | ||
+ | |||
+ | Vamos consolidar o funcionamento do break e continue usando os dois em um loop simmples. | ||
+ | |||
+ | Primeiramente execute o programa abaixo e confira as saídas. | ||
+ | <syntaxhighlight lang=java> | ||
+ | import java.util.Scanner; | ||
+ | |||
+ | public class ComandoForCombinado { | ||
+ | public static void main(String[] args) { | ||
+ | Scanner teclado = new Scanner(System.in); | ||
+ | |||
+ | int x; | ||
+ | |||
+ | for(x = 0; x <= 10; x++){ | ||
+ | System.out.println("x = " + x); | ||
+ | } | ||
+ | System.out.println("FIM"); | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Na sequência, modifique o programa inserindo os comandos break e continue: | ||
+ | |||
+ | <syntaxhighlight lang=java> | ||
+ | import java.util.Scanner; | ||
+ | |||
+ | public class ComandoForCombinado { | ||
+ | public static void main(String[] args) { | ||
+ | Scanner teclado = new Scanner(System.in); | ||
+ | //break -> simplesmente interrompe o nosso ciclo | ||
+ | //continue -> interrompe o laço (desvia o fluxo para o início do laço) | ||
+ | int x; | ||
+ | |||
+ | for(x = 0; x <= 10; x++){ | ||
+ | |||
+ | //qndo x == 2, interrompe somente o laço atual | ||
+ | if(x == 2){ | ||
+ | System.out.println("Valor de x é 2 - fazendo continue...\n"); | ||
+ | continue; | ||
+ | } | ||
+ | |||
+ | //Quando chegamos a 8 o loop será finalizado | ||
+ | if(x == 8){ | ||
+ | System.out.println("Valor de x é 8 - fazendo o break...\n"); | ||
+ | break; | ||
+ | } | ||
+ | |||
+ | System.out.println("x = " + x); | ||
+ | } | ||
+ | System.out.println("FIM"); | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Observe que para x == 2 o valor de x não é impresso. Posteriormente, quando x == 8 o loop se encerra. |
Edição atual tal como às 20h19min de 20 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 comando "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 ComandoForBreak {
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
Sintaxe e Semântica
O comando "continue" força o término de um laço do loop mas não encerra o loop. Observe o exemplo abaixo.
<syntaxhighlight lang=java>
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 )
continue;
System.out.println("O número" + numero + "não coincidiu com o número do laço... ");
}
}
Para a condição i==numero o fluxo de execução é forçado pelo comando continue a voltar para exp3 do comando for seguindo a semântica "normal"
Exercício 4
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 continuar normalmente, sendo considerados somente os números positivos para computação da média. Use o comando for() e continue. A média dos números fornecidos deve ser calculada no final.
Combinando o break e continue para consolidar a diferença
Vamos consolidar o funcionamento do break e continue usando os dois em um loop simmples.
Primeiramente execute o programa abaixo e confira as saídas.
import java.util.Scanner;
public class ComandoForCombinado {
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
int x;
for(x = 0; x <= 10; x++){
System.out.println("x = " + x);
}
System.out.println("FIM");
}
}
Na sequência, modifique o programa inserindo os comandos break e continue:
import java.util.Scanner;
public class ComandoForCombinado {
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
//break -> simplesmente interrompe o nosso ciclo
//continue -> interrompe o laço (desvia o fluxo para o início do laço)
int x;
for(x = 0; x <= 10; x++){
//qndo x == 2, interrompe somente o laço atual
if(x == 2){
System.out.println("Valor de x é 2 - fazendo continue...\n");
continue;
}
//Quando chegamos a 8 o loop será finalizado
if(x == 8){
System.out.println("Valor de x é 8 - fazendo o break...\n");
break;
}
System.out.println("x = " + x);
}
System.out.println("FIM");
}
}
Observe que para x == 2 o valor de x não é impresso. Posteriormente, quando x == 8 o loop se encerra.