sábado, 5 de setembro de 2009

Operadores Relacionais e lógicos,Constutores de decisão(if,switch)


Sumario: Operadores Relacionais e lógicos,Constutores de decisão(if,switch)
*Lembre sempre da tabela de precedência de Operadores


Quais são os Operadores em java?
Source: http://java.sun.com/docs/books/tutorial/java/nutsandbolts/opsummary.html

Simple Assignment Operator

= Simple assignment operator

Arithmetic Operators

+ Additive operator (also used for String concatenation)
- Subtraction operator
* Multiplication operator
/ Division operator
% Remainder operator

Unary Operators

+ Unary plus operator; indicates positive value (numbers are positive without this, however)
- Unary minus operator; negates an expression
++ Increment operator; increments a value by 1
-- Decrement operator; decrements a value by 1
! Logical compliment operator; inverts the value of a boolean(NOT)

Equality and Relational Operators

== Equal to
!= Not equal to
> Greater than
>= Greater than or equal to
<>
<= Less than or equal to

Conditional Operators

&& Conditional-AND
|| Conditional-OR
?: Ternary (shorthand for if-then-else statement)

Type Comparison Operator

instanceof Compares an object to a specified type

Bitwise and Bit Shift Operators

~ Unary bitwise complement
<<>
>> Signed right shift
>>> Unsigned right shift
& Bitwise AND
^ Bitwise exclusive OR
| Bitwise inclusive OR


Operadores Relacionais:
Os operadores relacionais são usados para comparar dois valores e determinar o relacionamento entre eles. O resultado dessa avaliação é booleano ou seja, True ou False.

Equality and Relational Operators(Operadores Relacionais)

== Equal to
!= Not equal to
> Greater than
>= Greater than or equal to
<>
<= Less than or equal to

O operador =(atribuição) atribui um valor a algo.
Tanto Operadores relacionais quanto condicionais retornam um resultado booleano.




Operadores lógicos:

Temos 2 tipos:
1 - De curto-circuito(Operadores Condicionais)
2 - De bit a bit(Esse não nos interessa estudar porem entram operadores que operam sobre bits em tipos de dados INTEIROS, tal como: ~,&,^ e | - NOT,AND, XOR, OR todos para bit a bit)

Curto-Circuito:

Conditional Operators

&& Conditional-AND
|| Conditional-OR
?: Ternary
! NOT(É unário porem entra nesse quesito)

Faz a Avaliação de mais de uma CONDIÇÃO, o resultado é sempre booleano(True OU FALSE), Normalmente usado com Operadores Relacionais.


Antes de tudo, CUIDADO COM A PRECEDÊNCIA de Operadores, Lembre - se que Parenteses tem Precedência 1, ou seja é FEITO ANTES DE TUDO oque esta dentro dele.

AND: Ambas as condições tem que ser True para && retornar True

Expressão:


Explicando a Expressão:


Temos um Operador Relacional(<) que avalia os dois operandos ( a e 1) Temos um Operador Relacional( > ) que avalia os 2 operandos( b e 1)

&& ->
Temos um Operador Condicional(&& - AND) que avalia as 2 condições:

1 -

2 -



Suposição 01:

int a = 0;
int b = 2;


Expressão:



Passo a passo:
1 - = O operador Relacional ( < ) avalia como True os 2 Operandos(a e 1)

2 -
= O operador Relacional ( < ) avalia como True os 2 Operandos(b e 1)

3 -
= O operador Condicional avalia as 2 expressões, True && True = True

4 - Resultado da Expressão: True





Suposição 02:
int a = 1;
int b = 2;


Expressão:



Passo a passo:
1 - = O operador Relacional ( < ) avalia como False os 2 Operandos(a e 1)

2- Resultado da Expressão: False(Sendo o Operador &&, ele avalia a primeira expressão se for falsa, ele nem avalia a SEGUNDA, ja que todos as expressões precisam ser TRUE)




Suposição 03:
int a = 0;
int b = 1;


Expressão:


Passo a passo:

1 - = O operador Relacional ( < ) avalia como True os 2 Operandos(a e 1)

2 - = O operador Relacional ( < ) avalia como False os 2 Operandos(b e 1)

3 - O operador Condicional avalia as 2 expressões, True && False = False

4 -
Resultado da Expressão: False





OR: Uma das condições precisa ser True


Expressão:




Explicando a Expressão:

Temos um Operador Relacional(<) que avalia os dois operandos ( a e 1)

Temos um Operador Relacional( > ) que avalia os 2 operandos( b e 1)

|| -> Temos um Operador Condicional(|| - OR) que avalia as 2 condições:
1 -
2 -


Suposição 01:
int a = 1;
int b = 1;


Expressão:



Passo a passo:
1 - = O operador Relacional ( < ) avalia como False os 2 Operandos(a e 1)

2 -
= O operador Relacional ( < ) avalia como False os 2 Operandos(b e 1)

3 -
= O operador Condicional( || ) avalia as 2 expressões,
False || False = False

4 - Resultado da Expressão: False



Suposição 02:
int a = 1;
int b = 2;


Expressão:



Passo a passo:
1 - = O operador Relacional ( < ) avalia como False os 2 Operandos(a e 1)

2 -
= O operador Relacional ( < ) avalia como True os 2 Operandos(b e 1)

3 -
= O operador Condicional( || ) avalia as 2 expressões,
False || True = True

4 - Resultado da Expressão: True





Suposição 03:
int a = 0;
int b = 0;


Expressão:



Passo a passo:
1 - = O operador Relacional ( < ) avalia como True os 2 Operandos(a e 1)

2- = O operador Condicional( || ) avalia a expressão com True pois um deles ja é True

4 - Resultado da Expressão: True





TERNÁRIO: - ?: -
Ele tem 3 partes que juntas formam uma expressão.

expressao1?expressao2:expressao3;

Caso expressao1 seja verdadeiro Então o resultado é expressao2
Caso expressao1 seja falsa Então o resultado é expressao3

Exemplo:
(20 > 2)?"É maior":"É menor";




NOT:
Troca o Resultado da avaliação

Exemplo:


int a = 0;

Expressão:


Analisando a Expressão:
1 -
- Temos um operador RELACIONAL(<) que avaia os Operandos e retorna um resultado Booleano, a é menor(<) que 1? 0<1?>

2 - ! True -> O contrário de true é false, então ficamos com False

3 -
= O operador Not avalia a Expressão como False


Suposição 02:

int a = 1;

Expressão:


Analisando a Expressão:
1 -Temos um operador RELACIONAL(<) que avaia os Operandos e retorna um resultado Booleano, a é menor(<) que 1? 1<1? style="font-weight: bold;"> FALSE(pois 1 é igual a 1)

2 -
! False - o contrário de False é True, portanto o resultado é True

3 -
- O Operador Not avalia a Expressão como True




Constutores de decisão:
***Lembre-se que temos 2 tipos de instruções, as de bloco de código e as de uma linha somente, portanto todas podem ser escritas com uma linha de instrução somente, como o exemplo o if abaixo.


O construtor if:

if(expressão_booleana){

bloco_de_código

}//fim da instrução

ou

if(expressão_booleana)
instrucao;

*expressão_booleana - É uma combinação de operadores relacionais, operadores condicionais ou uma variavel booleana ou seja qualquer instrução ou variavel que retorne um valor booleano

*bloco_de_código- São as linhas de código que são executadas caso a expressao_booleana retorne true

A expressão_booleana é avaliada:
Caso true - então o bloco_de_código é executado
Caso false - então pulamos para //fim da instrução


Isso é chamado de fluxograma


Vamos a um exemplo:


Dentro da expressao_booleana temos:
i < 2 - Um operador Relacional( < ) que avalia os 2 Operandos ( i e 2), e o Resultado é False ou seja i++ não é executado.



if Alinhado(ou seja if dentro de if):

Você pode querer alinhar construtores if, nesse caso temos um if dentro de outro:

if(expressão_booleana1){

bloco_de_código1

if(expressão_booleana2){

bloco_de_código2

}//fim do
bloco_de_código2

bloco_de_código1

}//fim do
bloco_de_código1

*Todos os lugares one esta escrito bloco_de_código pode ser escrito instruções.

VEJAMOS O FLUXOGRAMA:




Clique na imagem para ampliar


Construtores if/else :
São blocos de código onde, se for true o resultado da expressão_booleana um bloco_de_código é executado, se for false o resultado da expressão_booleana outro bloco_de_código é executado.


if(expressao_booleana){

bloco_de_codigo1

}else{

bloco_de_codigo2

}

*expressão_booleana - É uma combinação de operadores relacionais, operadores condicionais ou uma variavel booleana ou seja qualquer instrução ou variavel que retorne um valor booleano
*bloco_de_código1 - São as linhas de código que são executadas caso a expressao_booleana retorne true
*bloco_de_código2 - São as linhas de código que são executadas caso a expressao_booleana retorne false





Acorrentando Construtores if/else:
Você pode acorrentar construtores if/else obtendo assim diferentes expressões de avaliação:

if(expressao_booleana1){

bloco_de_codigo1

}else if(expressao_booleana2){

bloco_de_codigo2

}else{

bloco_de_codigo3

}

*expressão_booleana - É uma combinação de operadores relacionais, operadores condicionais ou uma variavel booleana ou seja qualquer instrução ou variavel que retorne um valor booleano
*bloco_de_código1 - São as linhas de código que são executadas caso a expressao_booleana1 retorne true
*bloco_de_código2 - São as linhas de código que são executadas caso a expressao_booleana1 retorne false e a expressao_booleana2 retorne true
*bloco_de_código3 - São as linhas de código que são executadas caso a expressao_booleana1 retorne false e a expressao_booleana2 retorne false também

Você pode também alinhar blocos if/else que forão acorrentados.




Construtor switch:
Permite que você tenha varias ramificações no seu código, isso quer dizer que você tem quantas avaliações de código quiser simplificando oque o acorrentamento de if/ else if /else faz.
Ele faz o teste apenas de igualdade , não se um valor é menor ou maior que o outro e sim somente testa o valor de igualdade uma vez, UMA VEZ.
Você pode NÃO PODE ALINHAR CONSTRUTORES switch!!! Porem pode alinhar outros construtores como if/else dentro do switch!!!


switch(variavel){
case valor_literal: codigo_de_bloco;[break]
case Outrovalor_literal: codigo_de_bloco;[break]

[default:] codigo_de_bloco;

}


*switch - É uma keyword que indica a declaração de uma instrução switch
*variavel - Você pode ter apenas aqui: byte,short, int ou enum
*case - É uma keyword que indica a declaração de um valor que você esta testando, O valor é testado com o valor de valor_literal a junção de ambos(case e valor_literal) é chamada de case label
*valor_literal - São valores literais para teste, pode ser Constant(variavel final) ou então literais('b', 20) ou enum
*break - É uma keyword, é opcional, sem a instrução break quando o valor for encontrado no valor_literal todos os abaixo deles vão ser executado caso não tenha o break, ele interrompe o fluxo na hora que acha(Realmente não tem como não usar).
*default - É opcional, e caso seja testado todos os case, e não tenha sido encontrado o valor desejado, o default é executado.

***Coloque sempre o break.


Um exemplo de um bloco switch:

switch(variavel){
case valor_literal: codigo_de_bloco;break;
case Outrovalor_literal: codigo_de_bloco;

default: codigo_de_bloco;

}

Veja que usamos uma instrução com o break, e outra sem, e usamos o default também...Vemos oque acontece:


Clique na imagem para ampliar

Quando usar switch?
- Para verificação de igualdade entre valores
- Para testar apenas um valor, esse do tipo int,shot,byte, char ou enum.

Você pode NÃO PODE ALINHAR CONSTRUTORES switch!!! Porem pode alinhar outros construtores como if/else dentro do switch!!!


É hora da revisão:

- Cuidado com a Precedência de Operadores, oque for Primeiro deve ser feito primeiro, exemplo Parenteses ( )
- Para avaliação de expressões booleanos usamos Operadores relacionais e condicionais
- Em blocos de decisão podemos usar instruções de um linha ou de código de bloco:
if(boolean_expression)
i++;

if(boolean_expression){
int x = 0;
i++;

}
- boolean_expression pode ser qualquer expressão que retorne uma valor booleano(Operadores Relacionais ou condicionais) ou então uma variável booleana
- O operador Condicional && - And, avalia a primeira expressão, caso seja falsa nem avalia a segunda ou teceira etc
- O operador Condicional || - OR, avalia a primeira expressão, caso seja verdadeira nem avalia a segunda ou terceira
- Podemos alinhar blocos if e if/else
- Podemos usar if/else...Para avaliar se for verdade ou falso
- Podemos acorrentar blocos if...if...else if...else
- switch é usado somente para avaliar a igualdade de um valor, com as várias opções
- EM switch só podemos usar , byte,short,int,char ou enum
- Você pode NÃO PODE ALINHAR CONSTRUTORES switch!!! Porem pode alinhar outros construtores como if/else dentro do switch!!!
- Se não usar break em switch, ele ao achar a opção não para e continua fazendo todas as instruções abaixo dele
- Somente se escreve Instruções aonde esta escrito bloco_de_codigo, vejamos o exemplo:

int i = 2;
if(i <1){
i++;

}
int j = 3;
else{
j++;
}

Isso não é aceito!!! SOMENTE É ACEITO QUE SE ESCREVA AONDE È bloco de código!!!

Bom é isso Pessoal, Próximo post laços!!!
CYA DUDES!!!

Nenhum comentário:

Postar um comentário