Pensamento Computacional - Comandos de repetição no Java: while()

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Objetivos da Aula

Após esta aula o aluno deverá:

  • conhecer a sintaxe e a semântica do comandos de repetição while();
  • mapear estruturas simples de repetição especificadas em fluxogramas ou pseudo-código em estruturas em linguagem Java.
  • saber usar while com blocos de código e com instruções simples;
  • aninhar comandos de repetição while.

Comando while()

A sintaxe do comando while() é:

while ( expressao ) 
    instrução

onde a a instrução pode ser:

    instrução simples terminada em ';'
ou
    bloco de instruções com chaves

O comando while permite implementar loops com controle no início.

A semântica do while é a seguinte: ao entrar no comando a EXPRESSÃO entre parênteses é AVALIADA. Caso resulte em uma valor VERDADEIRO o LAÇO do loop é executado uma vez. O programa testa então novamente a expressão. LEMBRAR que:

  • VERDADEIRO é o valor true de uma expressão booleana;
  • DENTRO do laço NORMALMENTE existe uma modificação de alguma parte da expressão de teste de forma que em algum momento o LOOP se encerra.
  • Ao se encerrar o programa continua na próxima instrução APÓS o comando "while()";
  • ANTES DE entrar no comando while SEMPRE tenha certeza que as variáveis estão com valores adequados de forma que a expressão SEJA AVALIADA sempre corretamente.

No exemplo que se segue existe UMA única instrução simples (terminada em ";").

public class contador {
    public static void main(String[] args) {
        int contador;
  
        contador=0;
        while (contador<5)     
           contador=contador+1;
        System.out.println("valor do contador =  " +  contador);        
    }
}

OBSERVE a seguir uma variação do exemplo anterior usando um bloco de instruções delimitado por "{" e "}"

public class contador {
    public static void main(String[] args) {
        int contador;
  
        contador=0;
        while (contador<5)  {  
            System.out.println("valor da expressão  contador < 5 é " +  (contador<5) );
            System.out.println("valor do contador =  " +  contador);
            contador=contador+1;
        }
        System.out.println("SAIU DO LOOP: valor da expressão  contador < 5 é " +  (contador<5) );        
        System.out.println("APÓS o while o valor do contador é  " +  contador);        
    }
}
Notar que a expressão contador<5 assume valor 0 (falso) e 1 (verdadeiro).

A estrutura do comando, informalmente, é:

while (expressão)
  instrução_simples;

ou

while (expressão) {
  lista_de_instruções
} 

Exemplo 1

Elaborar um programa java para calcular a média de N alunos de uma turma. Será fornecido para cada aluno a nota final.

  • DADOS DE ENTRADA:
    • Valor N (número de alunos). Um valor inteiro.
    • Valor da nota final para cada aluno. Um valor real.
  • DADOS DE SAÍDA: média calculada da turma.
import java.util.Scanner;

public class MediaTurma {
    public static void main(String[] args) {
        Scanner teclado = new Scanner(System.in);
        float mediaFinal, notaAluno, somaAc;
        int numN, i;

        System.out.println("Entre com a quantidade de alunos da turma");
        numN = teclado.nextInt();

        somaAc = 0;
        i = 0;
        while( i < numN ) {
            System.out.println("Entre com a nota do aluno " + (i + 1)  );
            notaAluno = teclado.nextFloat();
            somaAc = somaAc + notaAluno;
            i = i + 1;
        }
        mediaFinal = somaAc / numN;
        System.out.println("Media final é " +  mediaFinal);        
    }
}

OBSERVE que neste exemplo, o comando while possui um bloco de instruções delimitado por "{" e "}". A razão disso é que existem múltiplas instruções no laço do loop.

OBSERVE também que este exercício traz um padrão para cálculo de soma acumulada. Muitos problemas são resolvidos através da soma acumulada. No exemplo, a variável somaAc é inicialmente (antes do loop) iniciada com o elemento neutro da soma que é o ZERO. Dentro do loop, ela armazena a cada iteração, o seu valor anterior somado com um novo valor. Isso permitirá o cálculo da média APÓS o término do loop;.

Exercício associado ao exemplo 1

Modifique o exemplo acima para que no lugar de cada nota final de cada aluno, sejam fornecidas três notas. As duas maiores notas devem ser computadas para a média do aluno.

Exemplo 2

PROBLEMA: Elaborar um programa Java para computação do fatorial de um número conforme definição abaixo:

DADOS DE ENTRADA:número N (numero inteiro)

DADOS DE SAÌDA: FATORIAL computado

O fatorial é definido por:

FluxogramaFatorialNum.jpg


import java.util.Scanner;
// Atenção: supõe-se que o usuário não vai fornecer número negativo...
public class Fatorial {
    public static void main(String[] args) {
        Scanner teclado = new Scanner(System.in);
        int  valorFat;
        int numN, i;

        System.out.println("Entre com o número cujo fatorial será calculado");
        numN = teclado.nextInt();
        i = numN;

        valorFat = 1;
        i = numN;
        while( i > 1 ) {
            valorFat = valorFat * i;
            i = i - 1;
        }
 
        System.out.println("O fatorial de " + numN  + " é " +  valorFat);        
    }
}

Neste exemplo aparece um padrão muito utilizado em programação que é o produto acumulado. Uma variável chamada valorFat é inicialmente (antes do loop) iniciada com o elemento neutro da multiplicação, que é o 1. Já dentro do loop é armazena cumulativamente, a cada iteração o seu valor multiplicado pelo valor da variável i.

Aninhamento de Comandos de Repetição

Em várias situações será necessário realizar aninhamento de comandos de repetição, ou seja, dentro do bloco a ser repetido poderá ser necessário inserir outros comandos de repetição. Veja o exemplo abaixo:

Exemplo 3 - Desenho de um retângulo preenchido com X

import java.util.Scanner;

public class RepeticaoAninhada {
    public static void main(String[] args) {
        int i, j;
  
        i = 0;
        while ( i < 5 )  {

            j = 0;  
            while ( j < 21)  {         
                System.out.print("X");
                j = j + 1;    // j controla o número de execuções do loop mais interno
            }
            
            i = i + 1;        // i controla o número de execuções do loop mais externo
            System.out.println("");

        }
        System.out.println("SAIU DO LOOP");            
    }
}

Exercício associado ao exercício 4

Modificar o exemplo anterior para que o número de linhas e colunas de X (lados do retângulo) sejam fornecidas como entrada do programa.

Exemplo 5

PROBLEMA: Elaborar um programa Java para computar a soma de fatoriais N números a serem fornecidos.


Este exercício é basicamente a combinação de uma solução que envolve produto acumulado (fatorial) com soma acumulada (a soma dos fatoriais). Será necessário ANINHAR comandos de repetição!.