Variaveis primitivas e controle de fluxo

Propaganda
Variáveis primitivas e Controle de fluxo
Material baseado na apostila FJ-11: Java e
Orientação a Objetos do curso Caelum,
Ensino e Inovação, disponível para download
em http://www.caelum.com.br/apostilas/
1
Objetivos
•
Aprender a trabalhar com os seguintes recursos da
linguagem Java
–
declaração, atribuição de valores, casting e comparação de
variáveis;
–
controle de fluxo através de if e else;
–
instruções de laço for e while, controle de fluxo com break e
continue.
2
Declarando e usando variáveis
•
Podemos declarar variáveis dentro de blocos (trechos de
código delimitados por { ... } )
•
Em Java toda variável tem um tipo, que não pode ser
mudado uma vez declarado;
int idade;
•
As variáveis declaradas podem agora receber valores
idade = 15;
3
Comentários em Java
•
Um comentário
–
algo usado para documentar parte do código
–
nao faz parte do programa propriamente dito. Usado com o
propósito de documentação
–
é uma boa prática de programação incluir comentários em seu
código
public class Alo {
/*
* Meu primeiro programa Java
*/
…
}
4
Comentários em Java
•
A linha em vermelho a seguir é também um comentário
Java
public class Alo {
/**
* Meu primeiro programa Java
*/
public static void main(String[] args) {
// imprime a String Alo mundo na tela
…
}
…
}
5
Declarando e usando variáveis
•
As variáveis, uma vez inicializadas, podem ser utilizadas
em comandos de saída, cálculo de expressões, etc.
public class Alo {
public static void main(String[] args) {
// declara a idade
int idade = 15;
// usa idade em uma expressão
idade = idade + 1;
// imprime a idade
System.out.println(idade);
}
}
6
Operadores aritméticos em Java
Operador
Uso
Descrição
+
op1 + op2
Soma op1 e op2
*
op1 * op2
Multiplica op1 por op2
/
op1 / op2
Divide op1 por op2
%
op1 % op2
Calcula o resto da
divisão inteira de op1
por op2
-
op1 – op2
Subtrai op2 de op1
7
Operadores aritméticos: Exemplo
class OperadoresAritmeticos {
public static void main(String[] args) {
// alguns numeros
int i = 37;
int j = 42;
System.out.println("Valor das variaveis...");
System.out.println(" i = " + i);
System.out.println(" j = " + j);
// somando numeros
System.out.println("Somando...");
System.out.println(" i + j = " + (i + j));
// subtraindo numeros
System.out.println("subtraindo...");
System.out.println(" i - j = " + (i - j));
...
8
Operadores aritméticos: Exemplo
...
// multiplicando numeros
System.out.println("multiplicando...");
System.out.println(" i * j = " + (i * j));
// dividindo numeros
System.out.println("dividindo...");
System.out.println(" i / j = " + (i / j));
// resto da divisao inteira
System.out.println("Calculand0 o resto...");
System.out.println(" i % j = " + (i % j));
}
}
9
Variáveis de tipo primitivo
•
Além das variáveis de tipo inteiro, podemos ainda
declarar variáveis para armazenar números reais
(números com casas decimais), valores booleanos
(verdadeiro ou falso) e caracteres.
// variáveis double
double pi = 3.14;
// variáveis boolean
int idade = 30;
boolean menorDeIdade = idade < 18;
// variáveis char
char letra = ’a’;
10
Tipos primitivos e valores
•
Variáveis de tipo primitivo (int, double, boolean, char, etc.)
armazenam o dado em seu espaço de armazenamento (a
pilha ou stack)
j
5
i
5 6
stack
11
Casting e promoção
•
Algumas atribuições entre variáveis de tipos diferentes
são incompatíveis.
•
Nem mesmo o código a seguir compila:
12
Casting e promoção
•
Se tivermos certeza que o número real “cabe” em uma
variável inteira, podemos fazer um cast para evitar o erro
de compilação.
•
O número real é truncado antes da atribuição à variável
inteira.
13
Casting e promoção
•
Casts são usados também para obter a parte fracionária
da divisão de números inteiros
14
Tamanhos dos tipos
•
A tabela a seguir mostra o tamanho em bytes de cada
tipo primitivo em Java:
•
Para tipos numéricos, um número maior de bytes implica
na capacidade de armazenar números maiores.
15
Estruturas de Controle
•
Estruturas de Controle
–
•
Permitem alterar a ordem na qual os comandos em nossos
programas são executados
Dois tipos de Estruturas de Controle
–
estruturas de controle de decisão
•
–
permitem selecionar trechos específicos de código para serem
executados
estruturas de controle de repetição
•
permitem executar trechos específicos de código repetidas
vezes
16
Estruturas de Controle de Decisão
•
Estruturas de controle de decisão
–
•
Comandos Java que permitem selecionar e executar trechos
específicos de código e pular outros trechos de código.
Tipos
–
comando if
–
comando if-else
–
comando if-else-if
17
O comando if
•
O comando if
–
•
especifica que um comando (ou um bloco de comandos) será
executado se e somente se uma certa condição booleana for
verdadeira
Comandos if têm a forma:
if (expressão_booleana)
comando;
ou
if (expressão_booleana) {
comando1;
comando2;
}
onde:
expressão_booleana é qualquer expressão que retorna true ou
false
18
Fluxograma do comando if
19
Exemplo 1
20
Exemplo 2
21
Dicas de programação
•
A expressão booleana do comando if tem sempre de
resultar em um valor booleano. Isto é, a avaliação da
condição deve sempre resultar em um valor true ou false.
•
Idente os comandos dentro de um bloco if
Exemplo,
22
O comando if-else
•
O comando if-else
–
•
Usado quando queremos executar um comando se uma condição
for verdadeira e um diferente comando se a condição for falsa
O comando if-else tem a forma
23
Fluxograma
24
Exemplo 1
25
Exemplo 2
26
Dicas de Programação
1. Para evitar confusão, sempre coloque o comando (ou
comandos) de um bloco if ou if-else dentro de chaves {}
2. Você pode usar blocos if-else aninhados. Isto significa
que você pode ter outros blocos if-else dentro de um
bloco if-else
Exemplo:
27
O comando if-else-if
•
O comando na cláusula else de um bloco if-else pode ser
uma outra estrutura if-else
•
Este encadeamento de estruturas nos permite fazer
seleções mais complexas.
•
O comando tem a forma:
28
Exemplo
29
Operadores lógicos
•
Você pode concatenar expressões booleanas através dos
operadores lógicos E (&&) e OU (||)
30
Operadores lógicos
•
Este código pode ficar mais legível utilizando-se o
operador de negação (!)
31
Operadores Relacionais
•
•
Operadores relacionais comparam dois valores e
determinam o relacionamento entre esses valores.
O resultado da comparação é um valor booleano true ou
false
Operador
Uso
Descrição
>
op1 > op2
op1 é maior do que op2
>=
op1 >= op2
op1 é maior do que ou igual a op2
<
op1 < op2
op1 é menor do que op2
<=
op1 <= op2
op1 é menor do que ou igual a op2
==
op1 == op2
op1 e op2 são iguais
!=
op1 != op2
op1 e op2 são diferentes
32
Erros comuns
1. A condição no bloco if não resulta em um valor
booleano. Exemplo,
a variável numero não é do tipo boolean
2. Escrever elseif ao invés de else if
33
Erros comuns
3. Usar = ao invés de == para comparações
Exemplo:
isto deveria ter sido escrito como,
34
O comando switch
•
switch
–
•
permite a ramificação em múltiplas alternativas
O comando switch tem a forma:
35
O comando switch
•
onde:
–
expressao_avaliada
•
–
uma expressão inteira ou caractere
seletor1, seletor2, etc.
•
constantes inteiras ou caractere
36
O comando switch
•
Quando um switch é encontrado,
–
A expressão expressao_avaliada é avaliada e o fluxo é desviado
para o case cujo seletor é igual ao valor da expressão
–
O programa executa em seqüência os comandos, desde este
ponto até que um comando break seja encontrado, pulando então
para o primeiro comando após o fim da estrutura switch
–
Se nenhum dos cases for satisfeito, o bloco default é executado.
Observe no entanto, que o bloco default é opcional
37
O comando switch
•
Observações
–
De forma diversa ao comando if, não é necessário delimitar por
chaves os blocos de instruções no comando switch.
–
Quando o valor no case é igual ao valor da expressão, todos os
comandos no case são executados. E não apenas isso, os
comandos associados aos cases seguintes são também
executados.
–
Para impedir o programa de executar os comandos nos cases
subseqüentes, usamos o comando break como último comando
de um bloco.
38
Exemplo
39
Dicas de Programação
•
Decidir quando usar um comando if ou um switch é uma
decisão sua. Você pode decidir qual deles usar baseado
na legibilidade e em outros fatores.
•
Um comando if pode ser usado para tomar decisões
baseadas em uma faixa de valores ou condições,
enquanto que um comando switch tem de tomar decisões
baseadas apenas em um único valor inteiro ou caractere.
Além disso, o valor em cada bloco case tem de ser único.
40
Estruturas de Controle de Repetição
•
Estruturas de controle de repetição
–
•
comandos Java que permitem-nos executar blocos específicos de
código repetidas vezes.
Tipos:
–
laço while
–
laço do-while
–
laço for
41
O laço while
•
O laço while
–
•
comando, ou bloco de comandos, repetidos enquanto uma
condição é verdadeira.
O laço while tem a forma:
–
Os comandos no interior do laço while são executados enquanto
a expressao_booleana for verdadeira
42
Exemplo 1
43
Exemplo 2
44
Exemplo 3
45
Laço do-while
•
Laço do-while
–
similar ao laço while
–
os comandos no interior do laço do-while são executados várias
vezes, enquanto a condição for verdadeira
–
a principal diferença entre um laço while e um laço do-while:
•
•
os comandos no interior de um laço do-while são executados
pelo menos uma vez.
O laço do-while tem a forma:
46
Exemplo 1
47
Exemplo 2
48
Exemplo 3
49
Dicas de Programação
1. Um erro comum de programação ao usar o laço do-while
é esquecer de escrever o ponto e vírgula depois da
expressão do while
2. Assim como no caso dos laços while, esteja certo de que
seus laços do-while são finitos, isto é, que eles vão
terminar em algum momento.
50
O laço for
•
O laço for
–
•
permite a execução do mesmo código repetidas vezes.
O laço for tem a forma:
–
onde,
• inicializacao – inicializa a variável de controle do laço
• condição –
compara a variável de controle com algum valor
limite
• incremento – atualiza a variável de controle
51
Exemplo
•
O código acima é equivalente ao seguinte laço while,
52
Operadores de Incremento e Decremento
•
Operador de incremento unário (++)
•
Operador de decremento unário (--)
•
Os operadores de incremento e decremento aumentam
ou diminuem de uma unidade o valor armazenado em
uma variável.
•
Exemplo:
é equivalente a:
53
Operadores de Incremento e Decremento
Operador
Uso
Descrição
++
op++
Incrementa op de 1; na avaliação da expressão, usa o
valor de op antes do incremento.
++
++op
Incrementa op de 1; na avaliação da expressão, usa o
valor de op depois do incremento.
--
op--
Decrementa op de 1; na avaliação da expressão, usa o
valor de op antes de decremento.
--
--op
Decrementa op de 1; na avaliação da expressão, usa o
valor de op depois do decremento.
54
Operadores de Incremento e Decremento
•
Os operadores de incremento e decremento podem ser
colocados antes ou depois de um operando.
•
Quando usado antes de um operando, ele faz com que a
variável seja incrementada ou decrementada por 1 e
então o novo valor é usado na expressão onde a variável
aparece.
•
Exemplo:
55
Operadores de Incremento e Decremento
•
Quando os operadores de incremento e decremento são
colocados após o operando, o valor antigo da variável é
usado na expressão onde eles aparecem.
•
Exemplo:
56
Operadores de Incremento e
Decremento: Dicas de Codificação
•
Procure sempre manter as expressões contendo
operadores de incremento e decremento simples e fáceis
de entender.
57
Comandos de Redirecionamento
•
Comandos de redirecionamento nos permitem modificar o
fluxo de execução do programa.
•
Java oferece três comandos de redirecionamento
–
break
–
continue
–
return
58
O comando break
•
break
–
Termina o comando switch onde ele está inserido. O fluxo de
controle é transferido para o comando imediatamente seguinte ao
switch
–
Pode ser usado também para terminar um laço for, while ou dowhile
59
Exemplo
60
O comando continue
•
O comando continue
–
pula para o fim do laço mais interno e avalia a expressão
booleana que controla o laço, basicamente pulando o restante da
iteração corrente do laço
61
Exemplo
62
O comando return
•
O comando return
–
Usado para sair do método corrente
–
O fluxo de controle retorna para o comando seguinte à chamada
original do método
63
O comando return
•
Para retornar um valor
–
Simplesmente ponha o valor (ou uma expressão que calcula o
valor) depois da palavra reservada return
–
Exemplo,
return ++conta;
ou
return "Alo";
–
O tipo do dado retornado pelo return deve corresponder ao tipo
do valor de retorno declarado para o método
64
O comando return
•
Quando um método é declarado void, você pode usar
apenas o return que não retorna um valor;
–
•
Exemplo,
return;
Falaremos mais sobre o comando return mais tarde,
quando virmos métodos.
65
Escopo de uma variável
66
Escopo de uma variável
•
•
Escopo
–
Determina em que pontos do programa a variável é acessível
–
Determina o tempo de vida de uma variável, isto é, durante
quanto tempo a variável existe em memória
–
O escopo é determinado pelo local onde a declaração da variável
é colocada no programa
Para simplificar as coisas, pense no escopo como algo no
interior das chaves {...}. O código no interior das chaves é
chamado de um bloco de código.
67
Escopo de uma variável
•
O escopo de uma variável é:
–
O interior do bloco onde ela foi declarada, começando do ponto
onde ela foi declarada
68
Exemplo
A
C
B
E
D
69
Exemplo
•
O código no slide anterior apresenta cinco escopos
diferentes indicados pelas linhas e pelas letras
•
Dadas as variáveis i, j, k, m e n e os escopos A, B, C, D,
e E, temos os seguintes escopos para cada variável:
–
O escopo da variável i é A
–
O escopo da variável j é B
–
O escopo da variável k é C
–
O escopo da variável m é D
–
O escopo da variável n é E
70
Escopo de uma variável
•
Ao declarar variáveis, somente uma variável com um
dado identificador ou nome pode ser declarada em um
escopo.
•
Isto significa que, se você tiver a declaração:
{
int teste = 10;
int teste = 20;
}
o compilador Java gerará um erro uma vez que você
deveria ter nomes únicos para as suas variáveis em um
bloco
71
Download