Introdução à Programação
Um enfoque orientado a construção de
modelos em programas baseados em objetos
Gustavo Motta
Departamento de Informática - UFPB
5. Comandos condicionais
► Comando
Definição
► Um
comando é todo trecho de programa que, quando
executado, tem o efeito de modificar o conteúdo armazenado
em variáveis
► Comando
condicional
Definição
► Um
comando condicional contém uma certa quantidade de
subcomandos, dos quais exatamente um é escolhido para ser
executado, de acordo com uma condição
Modalidades em Java
if-else
switch
(C) 2008 Gustavo Motta
2
5. Comandos condicionais
► Comando
if-else
if (expressão-lógica)
subcomando_1;
else
subcomando_2;
• Nota-se
queaa execução
dos lógica
subcomandos
é mutuamente
exclusiva:
Caso
expressão
seja avaliada
true,
então o
somente
um deles é executado
subcomando_1
é escolhido para execução, caso
contrário
o subcomando_2
é selecionado
e
• Observa-se
ainda(false),
que todo else
refere-se ao if imediatamente
anterior
executado
double max = 0, x = Math.random(), y = Math.random();
if (x > y)
max = x;
else
(C) 2008 Gustavo Motta
max = y;
3
5. Comandos condicionais
► Comando
if-else
O comando if-else pode ser combinado para permitir
a escolha de exatamente um dentre vários subcomandos
if (expressão-lógica_1)
subcomando_1;
else if (expressão-lógica_2)
subcomando_2;
...
else if (expressão-lógica_n)
subcomando_n;
else
subcomando_0;
► As
expressões lógicas são avaliadas seqüencialmente e, na
primeira expressão-lógica_i que resulte true, o
subcomando_i é selecionado para execução. Caso nenhuma
expressão lógica seja(C)avaliada
true, então o subcomando_0 4é
2008 Gustavo Motta
o escolhido para execução
5. Comandos condicionais
► Comando
if-else
Exemplo: escolher o maior dentre três números
double max = 0, x = Math.random(), y = Math.random(),
z = Math.random();
if ((x >= y) && (x >= z))
max = x;
else if ((y >= x) && (y >= z))
max = y;
else
max = z;
(C) 2008 Gustavo Motta
5
5. Comandos condicionais
► Comando
if-else
A cláusula else do comando if-else é opcional
double
x
=
Math.random(),
y
=
Math.random();
double max = y;
if (x > y)
max = x;
System.out.println("x = " + x + " y = " + y);
System.out.println("max = " + max);
► No
caso, se a expressão lógica (x > y) for avaliada false, o
subcomando (max = x;) do if-else é saltado e o programa
segue executando o seu fluxo normal
(C) 2008 Gustavo Motta
6
5. Comandos condicionais
► Comando
if-else
Os if
subcomandos
de um
comando
if-else
podem
(e
{ provoca erros
• (expressão-lógica_1)
O trecho de código
abaixo
em tempo
de
subcomandos_1;
devem)
ser agrupados em blocos
compilação
}
else
if (expressão-lógica_2)
{
if
((saldo
+
valor)
<=
limite)
if ((saldo
+ valor) <= limite) {
subcomandos_2;
saldo= =saldo
saldo
+ valor;
saldo
+ valor;
...
creditaBonus(valor);
creditaBonus(valor);
}
}else
else
if (expressão-lógica_n)de
{ crédito não pode ser
System.out.println("Limite
else
{
subcomandos_n;
excedido");
System.out.println("Limite de crédito não pode ser excedido");
}
}
else •{ Apenas primeira linha assinalada é que faz parte do if
subcomandos_0;
• A segunda linha assinalada não é parte integrante do if
►
No
caso, os respectivos blocos das cláusulas if e else é que são
}
• A cláusula else não se refere a nenhum if, pois está separada do if
considerados subcomandos
pela segunda linha assinalada
•
► Não explicitar
os use
blocos
pode ocasionar
erroscom
e dificultar
Portanto,
sempre
o comando
if-else
blocos,o
entendimento
2008 Gustavo
Motta
7
mesmo quando não (C)for
necessário,
porque evita-se erros
deste tipo
5. Comandos condicionais
► Comando
if-else
Comandos if-else podem ser aninhados, de modo
que os blocos associados ao if possam conter outros
comandos if-else
Scanner entrada = new Scanner(System.in);
boolean aprovado = false;
String acessaInternetDuranteAaula = entrada.nextLine();
double mediaFinal = entrada.nextDouble(),
freqüência = entrada.nextDouble();
if (mediaFinal >= 5.0) {
if (freqüência >= 75) {
if (!acessaInternetDuranteAaula.equals(“s”)){
aprovado = true;
}
(C) 2008 Gustavo Motta
}}
8
5. Comandos condicionais
► Comando
switch {
switch (expressão-inteiro)
case n1: subcomando_1; break;
case n2: subcomando_2; break;
...
case nm: subcomando_m; break;
default: subcomando_0; break;
}
O comando switch avalia expressão-inteiro. O valor
resultante que casar com o valor ni da cláusula case
determina a execução do subcomando_i. Caso nenhum
valor case, estão o subcomando_0 da cláusula default é
executado
A cláusula
default
é opcional
(C) 2008 Gustavo Motta
O último
break
é sempre opcional
9
5. Comandos condicionais
► Comando
switch
Exemplo: datas
► int
month = entrada.nextInt();
• Note
que(month)
a mesma{saída poderia ser obtida com o comando if
switch
case month
1: System.out.println("January");
break;
int
= entrada.nextInt();
case 2: System.out.println("February"); break;
if
(month
== 1) {
case
3: System.out.println("March");
break;
case
4: System.out.println("April"); break;
System.out.println("January");
case 5: System.out.println("May"); break;
}case 6: System.out.println("June"); break;
case 7:
break;
else
if System.out.println("July");
(month == 2) {
case 8: System.out.println("August"); break;
System.out.println("February"); }
case 9: System.out.println("September"); break;
.case
. .10: System.out.println("October"); break;
case 11: System.out.println("November"); break;
• Neste
caso
particular,
o comando switch é mais simples
case
12:
System.out.println("December");
break;
} • Usa-se o if quando se lida com faixa de valores ou
outras condições mais
complexas
(C) 2008
Gustavo Motta
10
5. Comandos condicionais
► Comando
switch
Exemplo: datas
►
int month = entrada.nextInt();
int year = entrada.nextInt();
int numDays = 0;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: numDays = 31; break;
case 4:
case 6:
case 9:
case 11: numDays = 30; break;
case 2:
if (((year % 4 == 0) &&
!(year % 100 == 0)) ||
(year % 400 == 0))
numDays = 29;
else
numDays = 28;
(C) 2008 Gustavo Motta
break;
}
11