Operadores e controle de fluxo
Prof. Artur Todeschinin Crestani
Operadores Unários
Operador Descrição
! Negação
++ Pré e pós incremento
- - Pré e pós decremento
+ Sinal positivo
- Sinal negativo
~ Inversão e bits
() cast
Operador de negação
Este operador é utilizado para inverter o
valor de uma expressão booleana. Então
uma expressão !false resulta em true,
enquanto !true resulta em false.
Exemplo: Operadores.java
Incremento e decremento ++,--
Estes operadores modificam o valor de uma
expressão adicionando ou subtraindo 1.
–Pós-fixados: é feito após o uso da variável;
–Pré-fixados: é feito antes do uso da variável.
Exemplo: Operadores.java
Representação de sinal: + e -
Representam positivo e negativo
respectivamente.
Exemplo:
int x = -3
int z = +3; // z=3 seria exatamente igual
Inversão ~
Converte todos os bits 1 em 0 e todos os
bits 0 em 1.
Para obtenção do resultado da inversão bit
a bit de um número basta somar um e
inverter o sinal.
Exemplo:
TesteOperadorInversao.java
Conversão: cast
Usado para uma conversão explicita em
uma expressão.
– Pode ser aplicado para trocar tipos de valores
primitivos;
– Também pode ser aplicado em referencia
para objeto.
Cast explícito x Cast automático
byte
short
int
long
float
double
char
Cast explícito
Pode ser que double seja maior que a
capacidade máxima de um “byte”. Neste
caso estamos convertendo tipos de maior
capacidade para tipos de menor
capacidade. Temos que fazer o cast
explicitamente. Caso contrario teremos um
erro de compilação.
Cast automático
Não precisamos fazer cast explicito. Um
byte sempre “cabe” em um short, assim
como um long sempre “cabe” em um
float.
Exemplos: TesteCastTiposPrimitivos.java
Casting.java
Operadores aritméticos: +,-,*,/ e %
Soma e subtração: + e –
Java não permite a sobrecarga de
operadores. No entanto, a própria
linguagem sobrecarregou o operador + para
que este, quando aplicado a duas Strings,
fizesse a concatenação.
Multiplicação e divisão: * e /
São aplicáveis a todos os tipos primitivos
numéricos.
Resto da divisão: %
O operador módulo retorna o resto da
divisão.
Aplicado a números inteiros, porém pode
ser aplicado a dois números de ponto
flutuante.
Comparação: <,<=,>,>=,==,e !=
Estes operadores retornam verdadeiro (true) ou falso
(false) e são amplamente utilizados para comparar
dois tipos primitivos.
• <: menor que
• >: maior que
• <= menor ou igual que
• >= menor ou igual que
• ==: igual
• !=: diferente
Exemplo: TesteOperadoresComparacao.java
Comparação de tipos: instanceof
Verifica se um determinado objeto é uma
instância de uma classe.
O operador da esquerda deve ser uma variável
do tipo reference, portanto, não pode ser uma
variável do tipo primitivo, enquanto o operando
da direita deve ser uma classe, interface ou um
tipo array.
Exemplo: OperadorInstanceof.java
Operadores lógicos
AND e OR ( && e | | )
Estes operadores são aplicáveis somente entre operandos booleanos.
Quando utilizamos estes operadores, é sempre realizada uma
avaliação da primeira condição. Caso o resultado seja conhecido, a
avaliação da segunda condição não será necessária.
AND ( &&)
Se uma das condições for falsa, o resultado do AND será falso. Então,
caso a primeira condição seja falsa, o resultado é falso sem que a
avaliação da segunda condição seja realizada.
OR ( | | )
Se uma das condições for verdadeira, então o resultado do OR será
verdadeiro, portanto, se a primeira condição for verdadeira, a segunda
condição não será avaliada.
Exemplo: OperadoresLogicos.java
Atribuição: =,+=,-=,*=,/=,%=
Atribuem novos valores a uma variável ou expressão.
• = atribuição simples x = 7;
• += incrementa o valor da variável com o operando ou
expressão do lado direito x += 3.
O operador composto += funciona analogamente para muitos
outros operadores
Exemplos:
• -= (subtração);
• *= (multiplicação).
Por isso, freqüentemente encontramos a notação op=, em que
op pode ser substituído por diversos operadores.
Exemplo: OperadoresCompostos.java
Fluxo
Podemos representar um fluxo graficamente
com um diagrama de atividades. A idéia é de
um algoritmo seqüencial executado passo a
passo.
Instrução 1
Instrução 3
Instrução 2
Instrução 4
Comandos de controle de fluxo
if, else;
switch;
while;
do while;
for;
break;
continue.
if, else
Utilizamos comandos condicionais para
controlar o fluxo que nosso programa deve
seguir.
Sintaxe:
if(<expressão boolena ou valor booleano>)
//comandoA
else
//comandoB
*a expressão avaliada dentro do if deve obrigatoriamente
retornar ou ser um valor booleano.
if, else
Variável booleana.
boolean ok = true;
if (ok) {
System.out.println(“ok=true”);
}
Métodos que retornam um valor booleano.
String nome = “Pedro”;
if (nome.equals(“qualquer nome”)){
System.out.println(“nome=qualquer nome”)
}
if, else
Dois ou ais operadores booleanos ou
inteiros com operador lógico.
– if (ok && terminou), em que ok e
terminou são variáveis booleanas.
– if (x > 6), em que x é numérico
A expressão a ser avaliada no if, deve
estar SEMPRE entre parênteses.
if, else
Podemos usar o diagrama de atividades para
demonstrar o controle de fluxo com seleção o
if é representado pelo losango em vermelho
na figura.
Instrução 1
Instrução 4
Instrução 3Instrução 2
true false
switch
Sintaxe
switch (<variavel>){
case <valor> : //instruções
case <valor>: //instruções
case <valor>: //instruções
default: //instruções
}
A variável que estiver sendo avaliada no switch deverá
ser de um dos seguintes tipos:
– char;
– byte;
– short;
– int;
switch (em Java)
Sintaxe:
switch ( <variavel> ){
case <valor> :
//instruções
break;
case <valor>:
//instruções
break;
case <valor>:
//instruções
break;
default:
//instruções
}
Até a versão 1.6 do Java a variável que estiver sendo avaliada no
switch deverá ser de um dos seguintes tipos: char; byte; short;
int;
switch ( java 7 )
A grande modificação adicionada ao switch no Java 7 são comparações com as
String (os nossos tipos literais) portanto esse código abaixo compilaria em
Java 7.
String ide = "Idea";
switch (ide) {
case "Netbeans":
System.out.println("IDE Netbeans");
break;
case "Eclipse":
System.out.println("IDE Eclipse");
break;
case "Idea":
System.out.println("IDE Intellij IDEA");
break;
default:
System.out.println("Note Pad");
}
switch
A cláusula case suporta apenas valores
literais ou constantes de tipos compatíveis
com aquela variável declarada na cláusula
switch.
Quando um case verdadeiro é encontrado,
o programa segue as instruções do
switch, até que encontre a instrução
break, ou o término do bloco switch.
switch
A cláusula case suporta apenas valores literais
ou constantes de tipos compatíveis com aquela
variável declarada na cláusula switch.
Quando um case verdadeiro é encontrado, o
programa segue as instruções do switch, até
que encontre a instrução break, ou o término
do bloco switch.
Exemplo: TesteSwitch.java
while
Utilizamos comandos de repetição para
determinar de forma lógica quantas vezes
desejamos executar um bloco de instruções.
Sintaxe:
while (condicao booleana) {
//comandoA
}
while (condicao booleana)
//único comando;
Exemplo: TesteWhile.java
while
O laço while nunca executará se a
condição for falsa desde o princípio.
(HORSTMANN, 2008, p. 38).
Repita
condição
Comando
do while
O comando de repetição while, visto anteriormente,
difere do do while, pois o bloco de código escrito para
o laço, é executado pelo menos uma vez, mesmo que a
condição do while seja falsa.
Sintaxe:
do{
//conjunto de instruções
} while (<condicao>);
do
//uma única condição;
while (<condicao>);
Exemplo: TesteDoWhile.java
do while
O laço do while executará pelo menos
uma vez, mesmo se a condição for falsa
desde o princípio. Nas seguinte somente se
a condição for verdadeira. (HORSTMANN,
2008, p. 38).
Repita
condição
Comando
for
No laço for uma determinada expressão será repetida
até que a condição do for não seja mais satisfeita. Este
tipo de loop é freqüentemente utilizado para realizarmos
interações simples em que repetimos certa operação por
um número de vezes previamente conhecido.
Sintaxe:
for ([inicializacao]; [teste]; [incremento]){
//comando b
}
for ([inicializacao]; [teste]; [incremento])
//comando
Exemplo: TesteFor.java
criar variável
for
Inicialização:
É uma expressão que inicializa o loop. Esta
operação será realizada uma única vez.
Normalmente utilizamos o bloco de inicialização
para atribuirmos um valor inicial a variável que
contará o numero de vezes que a expressão será
executada.
Nele, podemos declarar e inicializar uma variável,
estando disponível somente para o bloco de código
do laço for.
for
Teste:
O teste deve, obrigatoriamente, ser uma expressão
booleana. O teste é a condição de término do loop.
Incremento:
A expressão especificada no incremento será
executada a cada ciclo realizado.
* A abertura e encerramento do bloco de
código na instrução “for” não são
obrigatórios quando tivermos apenas uma
operação.
for
O laço for nunca executará se a condição
for falsa desde o princípio semelhante ao
while. (HORSTMANN, 2008, p. 38).
Repita
condição
Comando
break
A instrução break em um comando de
repetição for, while ou do while,
fará co que o laço seja “interrompido”, ou
seja, faz com que o código pule para a
instrução seguinte ao fechamento da chave
do bloco de código do laço.
No exemplo, percebemos que depois que a
instrução break é executada, não é feita
mais nenhuma interação no laço for.
Condição
A condição é uma expressão lógica ou
boolean testada pela unidade aritmética e
lógica, devolvendo sempre uma resposta
true ou false. Convém lembrarmos o que
vimos a respeito de operadores relacionais
e operadores lógicos. (LOPES, 2002, p. 62).
Condição
(LOPES, 2002, p. 62).
Relacionais Usamos Lógicos Usamos
igual == E ( AND ) &&
diferente != OU ( OR ) ||
maior > negação !
menor <
menor igual <=
maior igual >=
(Reference)
ou Objetos
.equals( args )
Condição
A condição pode ser uma simples
expressão formada de dois operandos do
mesmo tipo e de um operador relacional
( >, <, >=, <=, == , != ou equals(args) ).
(LOPES, 2002, p. 63).
Referencias Bibliográficas
LOPES, Anita Introdução à programação,
500 Algoritmos Resolvidos. ed Campus, Rio
de Janeiro, RJ 2002.
HORSTMANN, Cay; CORNEL, Gary Core
Java Fundamentals v.1, Sun Microsystem
Press ed. 8 2008.
SIERRA, Kathy Use a cabeça! Java. ed.
Alta Books, Rio de Janeiro, RJ 2005.

02 controle de fluxo

  • 2.
    Operadores e controlede fluxo Prof. Artur Todeschinin Crestani
  • 3.
    Operadores Unários Operador Descrição !Negação ++ Pré e pós incremento - - Pré e pós decremento + Sinal positivo - Sinal negativo ~ Inversão e bits () cast
  • 4.
    Operador de negação Esteoperador é utilizado para inverter o valor de uma expressão booleana. Então uma expressão !false resulta em true, enquanto !true resulta em false. Exemplo: Operadores.java
  • 5.
    Incremento e decremento++,-- Estes operadores modificam o valor de uma expressão adicionando ou subtraindo 1. –Pós-fixados: é feito após o uso da variável; –Pré-fixados: é feito antes do uso da variável. Exemplo: Operadores.java
  • 6.
    Representação de sinal:+ e - Representam positivo e negativo respectivamente. Exemplo: int x = -3 int z = +3; // z=3 seria exatamente igual
  • 7.
    Inversão ~ Converte todosos bits 1 em 0 e todos os bits 0 em 1. Para obtenção do resultado da inversão bit a bit de um número basta somar um e inverter o sinal. Exemplo: TesteOperadorInversao.java
  • 8.
    Conversão: cast Usado parauma conversão explicita em uma expressão. – Pode ser aplicado para trocar tipos de valores primitivos; – Também pode ser aplicado em referencia para objeto.
  • 9.
    Cast explícito xCast automático byte short int long float double char
  • 10.
    Cast explícito Pode serque double seja maior que a capacidade máxima de um “byte”. Neste caso estamos convertendo tipos de maior capacidade para tipos de menor capacidade. Temos que fazer o cast explicitamente. Caso contrario teremos um erro de compilação.
  • 11.
    Cast automático Não precisamosfazer cast explicito. Um byte sempre “cabe” em um short, assim como um long sempre “cabe” em um float. Exemplos: TesteCastTiposPrimitivos.java Casting.java
  • 12.
    Operadores aritméticos: +,-,*,/e % Soma e subtração: + e – Java não permite a sobrecarga de operadores. No entanto, a própria linguagem sobrecarregou o operador + para que este, quando aplicado a duas Strings, fizesse a concatenação.
  • 13.
    Multiplicação e divisão:* e / São aplicáveis a todos os tipos primitivos numéricos. Resto da divisão: % O operador módulo retorna o resto da divisão. Aplicado a números inteiros, porém pode ser aplicado a dois números de ponto flutuante.
  • 14.
    Comparação: <,<=,>,>=,==,e != Estesoperadores retornam verdadeiro (true) ou falso (false) e são amplamente utilizados para comparar dois tipos primitivos. • <: menor que • >: maior que • <= menor ou igual que • >= menor ou igual que • ==: igual • !=: diferente Exemplo: TesteOperadoresComparacao.java
  • 15.
    Comparação de tipos:instanceof Verifica se um determinado objeto é uma instância de uma classe. O operador da esquerda deve ser uma variável do tipo reference, portanto, não pode ser uma variável do tipo primitivo, enquanto o operando da direita deve ser uma classe, interface ou um tipo array. Exemplo: OperadorInstanceof.java
  • 16.
    Operadores lógicos AND eOR ( && e | | ) Estes operadores são aplicáveis somente entre operandos booleanos. Quando utilizamos estes operadores, é sempre realizada uma avaliação da primeira condição. Caso o resultado seja conhecido, a avaliação da segunda condição não será necessária. AND ( &&) Se uma das condições for falsa, o resultado do AND será falso. Então, caso a primeira condição seja falsa, o resultado é falso sem que a avaliação da segunda condição seja realizada. OR ( | | ) Se uma das condições for verdadeira, então o resultado do OR será verdadeiro, portanto, se a primeira condição for verdadeira, a segunda condição não será avaliada. Exemplo: OperadoresLogicos.java
  • 17.
    Atribuição: =,+=,-=,*=,/=,%= Atribuem novosvalores a uma variável ou expressão. • = atribuição simples x = 7; • += incrementa o valor da variável com o operando ou expressão do lado direito x += 3. O operador composto += funciona analogamente para muitos outros operadores Exemplos: • -= (subtração); • *= (multiplicação). Por isso, freqüentemente encontramos a notação op=, em que op pode ser substituído por diversos operadores. Exemplo: OperadoresCompostos.java
  • 18.
    Fluxo Podemos representar umfluxo graficamente com um diagrama de atividades. A idéia é de um algoritmo seqüencial executado passo a passo. Instrução 1 Instrução 3 Instrução 2 Instrução 4
  • 19.
    Comandos de controlede fluxo if, else; switch; while; do while; for; break; continue.
  • 20.
    if, else Utilizamos comandoscondicionais para controlar o fluxo que nosso programa deve seguir. Sintaxe: if(<expressão boolena ou valor booleano>) //comandoA else //comandoB *a expressão avaliada dentro do if deve obrigatoriamente retornar ou ser um valor booleano.
  • 21.
    if, else Variável booleana. booleanok = true; if (ok) { System.out.println(“ok=true”); } Métodos que retornam um valor booleano. String nome = “Pedro”; if (nome.equals(“qualquer nome”)){ System.out.println(“nome=qualquer nome”) }
  • 22.
    if, else Dois ouais operadores booleanos ou inteiros com operador lógico. – if (ok && terminou), em que ok e terminou são variáveis booleanas. – if (x > 6), em que x é numérico A expressão a ser avaliada no if, deve estar SEMPRE entre parênteses.
  • 23.
    if, else Podemos usaro diagrama de atividades para demonstrar o controle de fluxo com seleção o if é representado pelo losango em vermelho na figura. Instrução 1 Instrução 4 Instrução 3Instrução 2 true false
  • 24.
    switch Sintaxe switch (<variavel>){ case <valor>: //instruções case <valor>: //instruções case <valor>: //instruções default: //instruções } A variável que estiver sendo avaliada no switch deverá ser de um dos seguintes tipos: – char; – byte; – short; – int;
  • 25.
    switch (em Java) Sintaxe: switch( <variavel> ){ case <valor> : //instruções break; case <valor>: //instruções break; case <valor>: //instruções break; default: //instruções } Até a versão 1.6 do Java a variável que estiver sendo avaliada no switch deverá ser de um dos seguintes tipos: char; byte; short; int;
  • 26.
    switch ( java7 ) A grande modificação adicionada ao switch no Java 7 são comparações com as String (os nossos tipos literais) portanto esse código abaixo compilaria em Java 7. String ide = "Idea"; switch (ide) { case "Netbeans": System.out.println("IDE Netbeans"); break; case "Eclipse": System.out.println("IDE Eclipse"); break; case "Idea": System.out.println("IDE Intellij IDEA"); break; default: System.out.println("Note Pad"); }
  • 27.
    switch A cláusula casesuporta apenas valores literais ou constantes de tipos compatíveis com aquela variável declarada na cláusula switch. Quando um case verdadeiro é encontrado, o programa segue as instruções do switch, até que encontre a instrução break, ou o término do bloco switch.
  • 28.
    switch A cláusula casesuporta apenas valores literais ou constantes de tipos compatíveis com aquela variável declarada na cláusula switch. Quando um case verdadeiro é encontrado, o programa segue as instruções do switch, até que encontre a instrução break, ou o término do bloco switch. Exemplo: TesteSwitch.java
  • 29.
    while Utilizamos comandos derepetição para determinar de forma lógica quantas vezes desejamos executar um bloco de instruções. Sintaxe: while (condicao booleana) { //comandoA } while (condicao booleana) //único comando; Exemplo: TesteWhile.java
  • 30.
    while O laço whilenunca executará se a condição for falsa desde o princípio. (HORSTMANN, 2008, p. 38). Repita condição Comando
  • 31.
    do while O comandode repetição while, visto anteriormente, difere do do while, pois o bloco de código escrito para o laço, é executado pelo menos uma vez, mesmo que a condição do while seja falsa. Sintaxe: do{ //conjunto de instruções } while (<condicao>); do //uma única condição; while (<condicao>); Exemplo: TesteDoWhile.java
  • 32.
    do while O laçodo while executará pelo menos uma vez, mesmo se a condição for falsa desde o princípio. Nas seguinte somente se a condição for verdadeira. (HORSTMANN, 2008, p. 38). Repita condição Comando
  • 33.
    for No laço foruma determinada expressão será repetida até que a condição do for não seja mais satisfeita. Este tipo de loop é freqüentemente utilizado para realizarmos interações simples em que repetimos certa operação por um número de vezes previamente conhecido. Sintaxe: for ([inicializacao]; [teste]; [incremento]){ //comando b } for ([inicializacao]; [teste]; [incremento]) //comando Exemplo: TesteFor.java criar variável
  • 34.
    for Inicialização: É uma expressãoque inicializa o loop. Esta operação será realizada uma única vez. Normalmente utilizamos o bloco de inicialização para atribuirmos um valor inicial a variável que contará o numero de vezes que a expressão será executada. Nele, podemos declarar e inicializar uma variável, estando disponível somente para o bloco de código do laço for.
  • 35.
    for Teste: O teste deve,obrigatoriamente, ser uma expressão booleana. O teste é a condição de término do loop. Incremento: A expressão especificada no incremento será executada a cada ciclo realizado. * A abertura e encerramento do bloco de código na instrução “for” não são obrigatórios quando tivermos apenas uma operação.
  • 36.
    for O laço fornunca executará se a condição for falsa desde o princípio semelhante ao while. (HORSTMANN, 2008, p. 38). Repita condição Comando
  • 37.
    break A instrução breakem um comando de repetição for, while ou do while, fará co que o laço seja “interrompido”, ou seja, faz com que o código pule para a instrução seguinte ao fechamento da chave do bloco de código do laço. No exemplo, percebemos que depois que a instrução break é executada, não é feita mais nenhuma interação no laço for.
  • 38.
    Condição A condição éuma expressão lógica ou boolean testada pela unidade aritmética e lógica, devolvendo sempre uma resposta true ou false. Convém lembrarmos o que vimos a respeito de operadores relacionais e operadores lógicos. (LOPES, 2002, p. 62).
  • 39.
    Condição (LOPES, 2002, p.62). Relacionais Usamos Lógicos Usamos igual == E ( AND ) && diferente != OU ( OR ) || maior > negação ! menor < menor igual <= maior igual >= (Reference) ou Objetos .equals( args )
  • 40.
    Condição A condição podeser uma simples expressão formada de dois operandos do mesmo tipo e de um operador relacional ( >, <, >=, <=, == , != ou equals(args) ). (LOPES, 2002, p. 63).
  • 41.
    Referencias Bibliográficas LOPES, AnitaIntrodução à programação, 500 Algoritmos Resolvidos. ed Campus, Rio de Janeiro, RJ 2002. HORSTMANN, Cay; CORNEL, Gary Core Java Fundamentals v.1, Sun Microsystem Press ed. 8 2008. SIERRA, Kathy Use a cabeça! Java. ed. Alta Books, Rio de Janeiro, RJ 2005.