Controle de Fluxo Parte ll

 

Continuando a segunda parte do artigo Controle de Fluxo será exposto informações sobre while, do while, for, for-each, break, continue e instruções rotuladas. Para aqueles que não acompanharam os outros arquivos aqui segue os links.

 

Orientação a Objetos - Parte I

Orientação a Objetos - Parte II

Declaração e Controle de Acesso Parte I

Declaração e Controle de Acesso – Parte II

 

WHILE – DO WHILE

O comando while é simples, ele é utilizado para executar um bloco na quantidade desconhecida de vezes. Veja a sintaxe na Listagem 08.

 

int x = 10;

while (x == 10) {

      System.out.println(“entrou no while”);

}

Listagem 08

 

Veja que o código da Listagem 08 será executado infinitamente, pois enquanto 10 for igual a 10 o código será executado.

 

Já o comando DO WHILE é semelhante, porem com um detalhe, todo o comando será executado ao menos uma vez pois a condição é verificada após a interação. Veja na Listagem 09.

 

int x = 10;

do {

System.out.println(“” + x);

x++;

} while (x < 11);

Listagem 09

 

FOR – FOR EACH

O comando FOR é utilizado quando você quantas vezes precisa fazer a interação. Ele é composto por três expressões, sendo elas:

a)    Declaração e inicialização

b)    Expressão condicional

c)    Expressão de interação

 

Um detalhe importante que você não pode esquecer é que na expressão condicional só pode haver UMA, mas você pode ter condições composta. Veja na Listagem 10.

 

for (int x = 0; x < 10 | (x % 2) == 0; x++) {

System.out.println(“” + x);

}  

Listagem 10

 

Até agora falamos da forma comum de usar o comando FOR, porem a partir do Java 1.5 que é o foco do nosso estudo você encontrará o FOR EACH que é uma simples de se fazer uma interação, situações que era necessário o uso do ITERATOR. 

 

Imagine que você tem uma lista de alunos que você deseja percorrer com Iterator como na Listagem 11.

 

Collection alunos = ...;

for (Iteractor i = alunos.iterator(); i.hasNext();) {

      Aluno usuário = (Aluno) i.next();

}

Listagem 11

 

Agora com o FOR-EACH as coisas ficam mais simples. Veja na Listagem 12

 

for (Aluno usuário : alunos) {

}

Listagem 12

 

Achou complicado? Imagine no exame! Mas então para entender melhor veja o exemplo da Listagem 13 com uma interação com o FOR simples.

 

int[] x = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

for (int i = 0; i < x.length; i++) {

      System.out.println(“ ” + x[i]);

}

Listagem 14

 

Agora veja na Listagem 15 a interação do mesmo array, porém com o FOR-EACH.

 

int[] x = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

for (int i : x) {

System.out.println(i);

}

Listagem 15

 

Viu com as coisas ficaram menos complicadas! Porém esteja preparado para encontrar as duas formas de loop no exame.

 

BREAK e CONTINUE

O comando break, como o próprio nome sugere ele interrompe o fluxo da interação, seja ele um for, while, do. Veja na Listagem 16 como funciona e qual é o comportamento de uma interação usando break.

 

int x = 0;

for (int i = 0; i < 10; i++) {

      x = i;

      if (i > 5)

            break;

}

System.out.println(“O ultimo valor de i foi ” + x);

Listagem 16

 

Veja que o resultado dessa compilação é: “O ultimo valor de i foi 6”, pois o break fez a interrupção que o valor de i foi maior que 5. Qual o primeiro número maior que 5 ? Bingo!

 

Mas se no lugar do break eu colocasse um CONTINUE? Qual seria o comportamento? Veja que no comando break houve uma total interrupção na interação, no caso do continue há pequena interrupção mas não parando o processo. Imagina que você queira saber os números pares entre 0 a 50. Então nesse caso você poderia usar o continue dizendo que quando o numero for dividido por 2 possuir um resto igual a 1 quer dizer que ele é impar então “pule-o”. Veja o código da Listagem 17 como ficaria.

 

for (int i = 0; i <= 50; i++) {

      if ((i % 2) == 1) continue;

      System.out.println(“ ” + i);

}

Listagem 17

 

INSTRUÇÕES ROTULADAS

As instruções rotuladas servem quando você quer usar laços aninhados e deseja fazer um desvio do fluxo de execução seja ele através de um break ou de um continue. Desta forma você nomeia o laço (label: antes do bloco do laço) e quando for realizado o desvio no fluxo da execução (break ou continue) salta para o nome do laço para o qual o fluxo deverá ser desviado.

 

Veja na Listagem 18 um exemplo de instrução rotulada.

 

rotulo: for (int i = 0; i < 5; i++) {

      for (int j = 0; j < 2; j++) {

            System.out.println(“Hello”);

            break rotulo;

      }

      System.out.println(“CERTIFICACAO”);

}

System.out.println(“Good-Bye”);

Listagem 18

 

No exemplo da Listagem 18 a instrução break rotula será executada e o fluxo sairá do loop rotulado com rotulo. Então a próxima linha a ser executada exibirá Good-Bye, sendo assim a execução CERTIFICAÇÃO nunca será alcançada.

 

Agora pessoal é só praticar tudo o que vimos até agora. Muito obrigado e aguardo vocês no próximo artigo

 

Fabiano Fernandes