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
Download

Nota de Aula