Mudanças entre as edições de "Pensamento Computacional - Comandos de controle de fluxo no Java: break e continue"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
 
(25 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
 
=Comando break=
 
=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. Normalmente seria um encerramento de forma atípica.
+
==Sintaxe e Semântica==
  
O exemplo a seguir demonstra o uso do break: é puramente demonstrativo. 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).
+
<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.
 
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 ComandoFor {
+
public class ComandoForBreak {
 
     public static void main(String[] args) {     
 
     public static void main(String[] args) {     
 
       int i, numero;
 
       int i, numero;
Linha 25: Linha 27:
 
       }
 
       }
 
       if ( i == 5 )
 
       if ( i == 5 )
              System.out.println("O loop acima terminou normalmente");
+
          System.out.println("O loop acima terminou normalmente");
 
       else
 
       else
              System.out.println("O loop acima encerrou pelo break");
+
          System.out.println("O loop acima encerrou pelo break");
  
 
     }     
 
     }     
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
Observe o detalhe da saída:
 +
 +
[[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:
 
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:
Linha 51: Linha 57:
 
               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 pelo break");
+
       } else
 
+
               System.out.println("O loop acima encerrou normalmente");
 +
              System.out.println("A condição de saída é flag falso (ou ambos)");
 
     }     
 
     }     
 
}
 
}
 
</syntaxhighlight>
 
</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==
+
==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=
 
=Comando continue=
  
O comando continue força o término de um laço do loop.
+
==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>
 
<syntaxhighlight lang=java>
 
import java.util.Scanner;
 
import java.util.Scanner;
Linha 74: Linha 99:
 
public class ComandoFor {
 
public class ComandoFor {
 
     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 < 10; i = i + 1 )
+
 
           System.out.println("Valor de i é " + i);
+
       for ( i = 0; i < 5; i = i + 1 ){
           if ( i == 5 )
+
           System.out.println("Laço de número " + i);
 +
          System.out.println("Entre com um número ");
 +
          numero = teclado.nextInt();
 +
           if ( i == numero )
 
               continue;
 
               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>
 
</syntaxhighlight>
  
==Exercício==
+
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:

ALG-ComandoBreak.png

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.