operadores lógicos e relacionais comandos condicionais (if …if669/material/aulasnovas2016/... ·...
Post on 31-Aug-2020
14 Views
Preview:
TRANSCRIPT
Ricardo Massa F. Lima rmfl@cin.ufpe.br
Sérgio C. B. Soares scbs@cin.ufpe.br
Operadores Lógicos e Relacionais Comandos condicionais (if-else)
Casting
AULA 04
Introdução a Programação – IF669 http://www.cin.ufpe.br/~if669
Operadores Relacionais
n Igual n Diferente n Menor que n Maior que n Menor ou igual n Maior ou igual
int x = ...
if (x == 2) ...
if (x != 2) ...
if (x < 2) ...
if (x > 2) ...
if (x <= 2) ...
if (x >= 2) ...
Operadores lógicos/booleanos
n Negação
– !
n Ou (or)
– | ou ||
n E (and)
– & ou &&
boolean b = ...
if (!b) ...
if ( (x > 2) ||
(x < 2) ) ...
if ( (x > 2) &&
(y > 0) ) ...
Tabela Verdade
n Uma tabela verdade contém todas as combinações true-false de uma expressão 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
disjunção exclusiva
Operadores booleanos (short-circuited)
n E (and) - && vs &
n Ou (or) - || vs |
n Os operadores && e || só avaliam o segundo operando se necessário
– false && ?
– true || ?
Exemplos de expressões 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 expressões 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
Expressões lógicas/booleanas
n Estruturas de controle (seleção e repetição) utilizam expressões 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 seleção 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
Padrão Só um if
if (EXP1) { //bloco 1
} else if (EXP2) {
//bloco 2
} else {
//bloco 3
}
if encadeado
Bloco = comandos delimitados por { e }
Exercício 1 (vamos fazer aqui) n Um programa que lê três números inteiros
distintos e imprime o maior dos três 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 solução mais genérica?
Exercício 2 (10 minutos)
n 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
n Java é uma linguagem fortemente tipada – Atribuir um valor de tipo errado resulta em um
erro de compilação
n Java pode, implicitamente, promover um tipo mais restrito em um tipo com maior amplitude – Nenhuma informação é perdida
n 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 definição 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;
Solução usando cast
Erro de compilação Valores int são maiores que short Valores double maiores que float
Operações com tipos primitivos
n Operações binárias em valores numéricos de tipos diferentes serão tratados da seguinte maneira:
– Se um dos operandos for do tipo double, então o outro será convertido para double (antes da operação)
– Caso contrário, se um dos operandos do tipo float, o outro será convertido para float (antes da operação)
– Caso contrário, se um dos operandos do tipo long, o outro será convertido para long (antes da operação)
– Caso contrário, ambos os operandos serão convertidos para int (antes da operação)
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 compilação (double) OK (int), 2 (constante) cabe no byte Erro de compilação (int) Erro de compilação (int) OK (int) OK (int)
O Compilador não armazena valores, só checa os tipos
A promoção de valores int para byte ou short só é implícita 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 automático!
Erro! Não faz casting automático de char para short (e vice-versa), mesmo com o tamanho dos tipos iguais.
ok! Casting Explícito!
Ilegal! 12.35 é um double! 12 estaria correto, faria o casting de int para float
Casting Implícito vs. Explícito
Precedência de operadores
n Procure no google por
n Mas lembre-se que parênteses sempre
forçam a precedência
e tornam o programa mais claro!
“Operator Precedence in Java”
1 + 5 * 9 (1 + 5) * 9
MAIS EXERCÍCIOS
Todas as soluções dos exercícios sempre em http://www.cin.ufpe.br/~if669/material/solucoes
Exercício 3
n 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
Exercício 4
n Ler valores para os três lados de um triângulo e dizer o seu tipo (eqüilátero, isósceles ou escaleno).
Exercício 5
n Ler dois valores reais, correspondentes ao peso e à altura de uma pessoa, e calcular o Índice de Massa Corporal (IMC), pela fórmula:
€
IMC =pesoaltura2
IMC calculado Mensagem
IMC≤ 18,5 abaixo do peso
18,5<IMC≤25 peso normal 25<IMC≤30 acima do peso
30<IMC obeso
n Em seguida, dar mensagem conforme a seguinte tabela:
A solução está um pouco mais interessante
top related