Programação I Aula 5 (Instruções de Repetição) Prof. Gilberto Irajá Müller Última atualização 24/3/2009 Instruções de Repetição • As instruções de repetição permitem fazer com que a execução de uma instrução (simples ou composta) seja repetida diversas vezes. Em Java existem três modalidades: while, for e do. Instruções de Repetição • while Permite repetir uma instrução ou um bloco, enquanto uma dada condição se mantiver verdadeira. Sintaxe: while (condição) instrução; ou while (condição) { instrução1; instrução2; } Instruções de Repetição • Inicialmente a condição é avaliada. Se der resultado true (verdadeiro), a instrução é executada e a condição volta a ser avaliada. Enquanto a condição for true (verdadeira), esse processo se repete. Quando a condição for false, o controle saltará para a primeira instrução após o laço while. Instruções de Repetição • Exemplo 5.1: int i = 1; while (i <= 5) System.out.println(i++); Qual será a saída? Instruções de Repetição • Exemplo 5.2: Teclado t = new Teclado(); double d = 0; int i = 1; while (i <= 5) { d = t.leDouble(); if (d > 0) System.out.println(Math.pow(d, 2)); i++; } Instruções de Repetição • for Permite repetir um ou vários comandos, dentro de um intervalo de valores, do início ao fim desse intervalo. Sintaxe: for(expressão inicial; condição; expressão incremento) instrução; ou for(expressão inicial; condição; expressão incremento){ instrução 1; instrução 2; } Instruções de Repetição • A instrução for equivale a uma instrução while do tipo: while (condição) { instrução; expressão incremento; } Instruções de Repetição • Exemplo 5.3: for(int i = 1; i < 6; i++) System.out.println(i); Qual é a saída do código acima? Utilize o for para o exemplo 5.2. Instruções de Repetição • for com múltiplos componentes Pode-se ter mais de uma expressão inicial, desde que separadas por vírgula. Esta construção não permite a declaração das variáveis de tipos de diferentes dentro do for. Exemplo 5.4: int i = 0; double d = 0; for (i = 1, d = 10; i <= 5; i++ , d -=0.5) System.out.println(i + " " + d); QUAL É A SAÍDA DO CÓDIGO ACIMA? Instruções de Repetição • Laços for aninhados Acontece quando temos um for dentro do corpo de outro for. Exemplo 5.5: for (int i = 1; i<=5; i++) { for (int j = 1; j<=i; j++) System.out.print("* "); System.out.println(“”); } QUAL É A SAÍDA DO CÓDIGO ACIMA? Instruções de Repetição • do (...while) É uma versão do laço while-do, mas difere porque a condição é testada no fim do laço, enquanto no while o teste ocorre no início do laço. Assim, o laço while pode executar zero vezes, enquanto o do executa pelo menos uma vez. Instruções de Repetição • Sintaxe: do instrução; while (condição); ou do { instrução1; instrução2; } while (condição); Enquanto a condição for verdadeira (true), o laço será executado. Instruções de Repetição • Exemplo 5.6: int idade; Teclado t = new Teclado(); do idade = t.leInt("Informe a idade: "); while (idade <= 0); Faça o exemplo 5.4 com a instrução do/while Instruções de Repetição • Variáveis Locais Há situações em que necessitamos usar uma variável auxiliar dentro de um método, que não pode ser uma variável de instância (atributo), nem um parâmetro. • Podemos declarar variáveis locais que serão conhecidas somente dentro do método. Quando o método terminar seu processamento, a variável desaparecerá. É o caso das variáveis usadas nos exemplos anteriores para controlar as repetições. Instruções de Repetição • Exemplo 5.7: int i = 0; double salario = 500.0; • Se declararmos uma variável dentro do for, ela não será reconhecida fora do laço for. Perceba a diferença entre os dois trechos a seguir: Instruções de Repetição double d = 0; for (d = 10; d > 0; d -= 0.5) System.out.println(d); System.out.println (d); A variável “d” foi declarada fora do “for”. Portanto, terá vida útil nas instruções seguintes. for (double d = 10; d > 0; d -= 0.5) System.out.println(d); A variável “d” foi declarada dentro do “for”. Portanto, terá vida útil somente dentro do System.out.println (d); “for”. A instrução ocasionará ERRO, pois não existe a variável “d”. Instruções de Repetição • Escopo de Variáveis O escopo de uma variável é o espaço do programa em que a referida variável é reconhecida. Java restringe o escopo da variável ao bloco onde foi declarada. Assim, quanto ao escopo, as variáveis se dividem em: • Atributo privado – seu escopo é a classe toda • Parâmetro – seu escopo é o método ou o construtor onde foi declarado • Variável local – seu escopo é o método, ou o construtor, ou o for/while/do, ou o bloco de código onde foi declarada Instruções de Repetição • Vida útil das variáveis É o espaço de tempo que vai da alocação de memória para a variável até a sua eliminação (liberação deste espaço de memória), durante a execução de um programa: • Atributo – alocação quando o objeto é instanciado e eliminação quando o objeto é destruído • Parâmetro – alocação quando o método ou construtor onde foi declarado é chamado e eliminação quando o método ou construtor termina sua execução • Variável local – alocação quando o método, construtor, for/while/do ou bloco de código onde ela foi declarada inicia a execução e eliminação ao término desta execução Instruções de Repetição • Contadores e Acumuladores O método a seguir lê do teclado diversas idades de pessoas parando quando for lida uma idade negativa ou nula. O método calcula e devolve a média das idades lidas, ou zero, se nenhuma idade positiva for lida. Instruções de Repetição public int calculaMediaIdades() { // soma, conta e idade são variáveis locais int soma = 0; int cont = 0; Teclado t = new Teclado(); int idade = t.leInt("Digite uma idade(0 interrompe): "); while (idade > 0){ soma = soma + idade; cont++; idade = t.leInt("Digite uma idade(0 interrompe): "); } if (cont > 0) // este teste é para evitar a divisão por zero return soma / cont; else return 0; } Instruções de Repetição • Qual é a variável “contador”? • Qual é a variável “acumulador”? • Um contador executa uma tarefa de contagem de alguma grandeza (no caso, idades válidas digitadas). • Um acumulador executa uma tarefa de soma de alguma grandeza (no caso, idades válidas digitadas). • Um contador recebe incrementos constantes. • Um acumulador recebe incrementos variáveis. Métodos • Exercício 5.8 Escreva um método Java que recebe a altura n e devolve um String com o seguinte triângulo (use o caractere de escape \n para indicar o salto de linha): 1 22 333 4444 etc... Dica: Tem dois for Métodos • Exercício 5.9 Escreva um método que calcula o fatorial de um determinado valor inteiro. Passe como parâmetro esse valor inteiro! Dica: Tem for Métodos • Exercício 5.10 Escreva um método que lê via teclado 8 números reais positivos e retorna o valor do maior deles. Validar os dados de entrada, pedindo outro número sempre que o usuário digitar um valor nulo ou negativo. Dica: Tem while, for e if Métodos • Exercício 5.11 Escreva um método em Java de nome max, que recebe quatro números inteiros e retorna o valor do maior deles. Dica: Tem if Métodos • Exercício 5.12 Escreva um método em Java que lê do teclado um número qualquer e retorna a palavra Positivo, Negativo ou Nulo, conforme o caso. Dica: Tem if... else if... Métodos • Referências bibliográficas • http://inf.unisinos.br/~anibal • http://www.google.com.br