Sei sulla pagina 1di 22

Ricardo Massa F.

Lima
rmfl@cin.ufpe.br
Srgio C. B. Soares
scbs@cin.ufpe.br

Operadores Lgicos e Relacionais
Comandos condicionais (if-else)
Casting

AULA 04
Introduo a Programao IF669
http://www.cin.ufpe.br/~if669
Operadores Relacionais
Igual
Diferente
Menor que
Maior que
Menor ou igual
Maior ou igual

int x = ...
if (x == 2) ...
if (x != 2) ...
if (x < 2) ...
if (x > 2) ...
if (x <= 2) ...
if (x >= 2) ...
Operadores lgicos/booleanos
Negao
!
Ou (or)
| ou ||
E (and)
& ou &&
boolean b = ...
if (!b) ...
if ( (x > 2) ||
(x < 2) ) ...
if ( (x > 2) &&
(y > 0) ) ...
Tabela Verdade
Uma tabela verdade contm todas as
combinaes true-false de uma
expresso booleana

4
a b !b a && b a || b a ^ b
true true false true true false
true false true false true true
false true false false true true
false false true false false false
^ o
operador de
disjuno
exclusiva
Operadores booleanos
(short-circuited)
E (and) - && vs &
Ou (or) - || vs |
Os operadores && e || s avaliam o
segundo operando se necessrio
false && ?
true || ?

Exemplos de expresses booleanas
6
boolean b = true;
boolean c = !b;
c = !(true || b) && c;
b = c || !(!b);
true ?
b c
true false
true false
true false
Qual o valor de b e c a cada passo?
Mais exemplos de expresses
booleanas
7
boolean b, c;
b = true || false;
c = true && b;
b = b == c;
Qual o valor de b e c a cada passo?
? ?
b c
true ?
true true
true true
Expresses lgicas/booleanas
Estruturas de controle
(seleo e repetio)
utilizam expresses
booleanas para decidir
qual bloco de comandos
ser executado
se o bloco de comandos
dever ser repetido

8
if (EXPR_BOOL) {
//bloco 1
} else {
//bloco 2
}
while (EXPR_BOOL) {
//bloco
}

Estrutura de controle de seleo
Comando if-else
if (EXPR_BOOL) {
//bloco 1
} else {
//bloco 2
}
if (EXPR_BOOL)
//comando 1
else
//comando 2
Sem abre-fecha chaves
if (EXPR_BOOL)
//comando 1
Padro S um if
if (EXP1) {
//bloco 1
} else if (EXP2) {
//bloco 2
} else {
//bloco 3
}
if encadeado
Bloco = comandos delimitados por { e }
Exerccio 1 (vamos fazer aqui)
Um programa que l trs nmeros inteiros
distintos e imprime o maior dos trs

Scanner in = new Scanner(System.in);
int n1, n2, n3;
System.out.println("Digite o primeiro inteiro");
n1 = in.nextInt();
System.out.println("Digite o segundo inteiro");
n2 = in.nextInt();
System.out.println("Digite o terceiro inteiro");
n3 = in.nextInt();
if ( (n1 > n2) && (n1 > n3) ) {
System.out.println(n1);
} else if (n2 > n3) {
System.out.println(n2);
} else {
System.out.println(n3);
}
Como tornar a soluo
mais genrica?
Exerccio 2 (10 minutos)
Ler um valor real correspondente a uma
nota, tal que 0 nota 10, e imprimir o
conceito equivalente (A, B, C, D ou E),
conforme a seguinte tabela:

Conceito Intervalo
A 8,5 nota 10,0
B 7,0 nota < 8,5
C 5,0 nota < 7,0
D 3,0 nota < 5,0
E nota < 3,0
Tipos Primitivos - Casting
Java uma linguagem fortemente tipada
Atribuir um valor de tipo errado resulta em um
erro de compilao
Java pode, implicitamente, promover um tipo
mais restrito em um tipo com maior amplitude
Nenhuma informao perdida
Para restringir um tipo mais amplo preciso
utilizar casts explicitamente
Cast cria um novo valor e permite que ele seja
tratado como um tipo diferente de sua definio
original

Exemplos
byte b = 1;
short s = b;
int i = s;
long l = i;
float f = i;
double d = f;
s = i;
l = i;
i = b;
f = d;
Algum problema? Onde?
s = (short)i;
f = (float)d;
Soluo usando cast
Erro de compilao
Valores int so maiores que short
Valores double maiores que float
Operaes com tipos primitivos
Operaes binrias em valores numricos de tipos
diferentes sero tratados da seguinte maneira:
Se um dos operandos for do tipo double, ento o outro
ser convertido para double (antes da operao)
Caso contrrio, se um dos operandos do tipo float, o
outro ser convertido para float (antes da operao)
Caso contrrio, se um dos operandos do tipo long, o
outro ser convertido para long (antes da operao)
Caso contrrio, ambos os operandos sero convertidos
para int (antes da operao)


double float long int
Exemplos
byte b = 1 + 1.0;
b = 1 + 1;
b = 1 + b;
short s = i + b;
int i = s + b;
i = i + 1;
Algum problema? Onde?
Erro de compilao (double)
OK (int), 2 (constante) cabe no byte
Erro de compilao (int)
Erro de compilao (int)
OK (int)
OK (int)
O Compilador no armazena
valores, s checa os tipos
A promoo de valores int para byte ou
short s implcita se forem constantes
long p = (long) 12345.56;
int g = p;
char c = t;
int j = c;
short k = c;
short k = (short) c;
float f = 12.35;
ok! p = 12345L
Erro! Apesar de um int suportar o valor 12345
Casting automtico!
Erro! No faz casting automtico de char para short
(e vice-versa), mesmo com o tamanho dos tipos iguais.
ok! Casting Explcito!
Ilegal! 12.35 um double! 12 estaria
correto, faria o casting de int para float
Casting Implcito vs. Explcito
Precedncia de operadores
Procure no google por


Mas lembre-se que parnteses sempre
foram a precedncia


e tornam o programa mais claro!
Operator Precedence in Java
1 + 5 * 9 (1 + 5) * 9
MAIS EXERCCIOS
Todas as solues dos exerccios sempre em
http://www.cin.ufpe.br/~if669/material/solucoes
Exerccio 3
Ler dois valores reais, x e y,
correspondentes s coordenadas de um
ponto no plano e dizer em que quadrante
se encontra, ou se est no eixo-x ou no
eixo-y ou se est na origem.

1 2
4 3
x
y
Exerccio 4
Ler valores para os trs lados de um
tringulo e dizer o seu tipo (eqiltero,
issceles ou escaleno).
Exerccio 5
Ler dois valores reais, correspondentes
ao peso e altura de uma pessoa, e
calcular o ndice de Massa Corporal
(IMC), pela frmula:

IMC
peso
altura
2
IMC calculado Mensagem
IMC 18,5 abaixo do peso
18,5<IMC25 peso normal
25<IMC30 acima do peso
30<IMC obeso
Em seguida, dar
mensagem
conforme a
seguinte tabela:
A soluo est um pouco mais interessante

Potrebbero piacerti anche