aula 3
DESCRIPTION
Aula 3. Variáveis, expressões, operadores e instruções de selecção. Estrutura de um programa em Java. /** * Estrutura básica de um programa em Java. * @author Xico */ public class NomeDoPrograma { public static void main(String[] parametros) { // Instruções... } } - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/1.jpg)
Aula 3
Variáveis, expressões, operadores e instruções de selecção
![Page 2: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/2.jpg)
2007/20082
Estrutura deum programa em Java
/** * Estrutura básica de um programa em Java. * @author Xico */public class NomeDoPrograma { public static void main(String[] parametros) { // Instruções... }}
Todas as frases precedidas de // ou entre /* e */ são comentários, sendo ignorados pelo compilador
comentários
![Page 3: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/3.jpg)
2007/20083
Variáveis
Servem para guardar informação Guardam dados que têm de ser de um tipo
definido !
(dados provêm de um dado domínio, bem definido)
235 ‘a’ 435.72 “Letras”
Inteiro Letra/caracter DecimalCadeia de caracteres
(String)“Letras” 435.72
![Page 4: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/4.jpg)
2007/20084
Variáveis
Antes da primeira utilização :
Tem de se declarar quais as variáveis que passam a existir nesse programa, qual o seu nome e tipo - declaração
Deve também ser dado um valor inicial a cada variável - inicialização
Após a declaração:
Podem ser utilizadas para guardar dados (valores) Colocação de um valor numa variável chama-se
atribuição – atribuição de um valor a uma variável
![Page 5: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/5.jpg)
2007/20085
Variáveis (representação gráfica)
numero : int
12
Nome: numero
Tipo:(int = inteiro)
Valor: 12Em java:
int numero = 12;
ou:
int numero;
numero = 12;
![Page 6: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/6.jpg)
2007/20086
Variáveis (declaração e inicialização)
boolean encontrado = false;
Tipo: booleano, ou seja, só pode tomar os valores falso e verdadeiro
Nome Valor inicial
encontrado : boolean
false
![Page 7: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/7.jpg)
2007/20087
Variáveis (declaração e inicialização)
int número_de_alunos = 39;double taxa_de_conversão = 200.482;char c = ‘A’;
Nomes de pedaços de memória (na verdade são traduzidos para endereços de memória)
Interpretação do conteúdo baseada no tipo associado
![Page 8: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/8.jpg)
2007/20088
Variáveis e Identificadores
Variáveis são conhecidas pelo seu nome:
O nome da variável é um identificador
Os identificadores não podem ser repetidos na mesma zona do programa
Nota: matéria a desenvolver em aulas futuras
![Page 9: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/9.jpg)
2007/20089
Variáveis e Identificadores
Identificadores não podem ser quaisquer:
São constituídos por letras, números e os caracteres _ e $
• Os identificadores começados por _ e $ são usados nas bibliotecas standard e devem ser evitados noutros programas.
Primeiro caracter não pode ser um algarismo (0, 1, …, 9)
Maiúsculas e minúsculas são caracteres diferentes!
Não podem ser palavras reservadas (e.g. for, while, int, if, for, etc.)
![Page 10: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/10.jpg)
2007/200810
Palavras Reservadas, Variáveis e Tipos
Palavras Reservadas de uma Linguagem:
Têm um significado especial para o compilador
Não podem ser usadas para outras finalidades
Variáveis são criadas sempre associadas a um tipo de dados
Tipo de dados é sempre uma palavra reservada (tipos primitivos)
Não pode ser usado para outras finalidades
Exemplo: int é palavra reservada em JAVA
float int = 300.0; // ERRO FLAGRANTE!
![Page 11: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/11.jpg)
2007/200811
Tipos de dados
Primitivos char – um caracter
int – número inteiro (existem três outros tipos de inteiros)
float ou double – número decimal
boolean – verdadeiro ou falso
Classes Object
String – cadeia de caracteres
…
Tipos definidos pelo utilizador
![Page 12: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/12.jpg)
2007/200812
Caracteres
Tipo: char Número de bits para guardar um caracter: 16 Número total de padrões de bits: 216 = 65 536 Código: Unicode ( associa um número a cada caracter independente
do idioma. Sugestão: consulte Unicode )
char memória
‘A’ ..... 0000 0000 0100 0001
‘a’ ..... 0000 0000 0110 0001
‘0’ ..... 0000 0000 0011 0000
![Page 13: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/13.jpg)
2007/200813
Inteiros
Exemplo:
Tipo: int Número de bits: 32
memória int
0000 0000 0000 0000 0000 0000 0100 0001 … 65
Tipo Tamanho
byte 8
short 16
int 32
long 64
![Page 14: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/14.jpg)
2007/200814
Valores decimais (ou em vírgula flutuante)
Exemplos:
Tipo: float Número de bits: 32 float x = 0.0f; (ou 0.0F)
( por omissão um real é double; para ser explicita-
mente float poderá inicializar-se a var. desta forma )
memória float0000 0000 0000 0000 0000 0000 0100 0001 … 9.1E-44
Tipo: double Número de bits: 64 double x = 0.0; (ou 0.0d ou 0.0D)
![Page 15: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/15.jpg)
2007/200815
Memória
Os 32 bits de memória:
0000 0000 0000 0000 0000 0000 0100 0001
podem corresponder a: (char) ‘A’ … apenas considera os 16 à direita
(int) 65
(float) 9.1E-44
Nota: o que está num endereço de memória pode ser igual ... mas ser interpretado de formas diferentes...
Cada célula temum endereço, em
base hexadecimal, ex: @10b62db
26 * 1 20 * 1+
![Page 16: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/16.jpg)
2007/200816
Memória
A mesma memória pode ser vista a vários níveis:
x:int
0 0 1 0 1 0 0 1 0 0 0 0 0 1
letra:char
… …
5 ’A’
Variáveis com nomese tipos
Representação binária (o que realmente lá está)
Conteúdos, assumindo tipos definidos5 ‘A’… …
… …
![Page 17: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/17.jpg)
2007/200817
Referências/Objectos
Object um_objecto = new Object();
String cadeia = new String(“ISCTE”); …
um_objecto : Object
Object@10b62c9
Memória dinâmica(heap)
@10b62c9
cadeia : String
String@10b62db
…@10b62ca
…@10b62db
‘I’@10b62e8
‘S’@10b62e9
‘C’@10b62ea
‘T’@10b62eb
‘E’@10b62ec
…
…Memória estática(stack)
![Page 18: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/18.jpg)
2007/200818
Tipos primitivos em JAVA (8 tipos)
Tipo Tamanho/
Formato
Valores literais Domínio
(números inteiros)
byte 8 bits 10, ... [-128, 127]
short 16 bits 234, ... [-32768, 32767]
int 32 bits 176, ... [-2147483648, 2147483647]
long 64 bits 8374L, ... [-9223372036854775808, …07]
(números decimais)
float 32-bit 3.14f, 200.482F, ... [+/-1.4E-45, +/- ~3.40E38]
double 64-bit 18.0, 1.8e1, 18.0d, ... [+/-4.9E-324, +/- ~1.78E308]
(outros tipos)
char 16 bits/Unicode ‘A’, ‘.’, ‘£’, ... […,’!’,…’ ÿ ‘, …] ou [\u0000, \uffff]
boolean (não definido) false e true {false, true}
![Page 19: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/19.jpg)
2007/200819
Escrita de valores no ecrã
Para escrever informação no monitor:
System.out.print();
System.out.println();
• A última versão efectua mudança de linha no fim da escrita
Ex: System.out.println(375); int x = 12; System.out.println(x);
System.out.println(“ “ + 375 + “-” + x);
37512375-12
ecrã
![Page 20: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/20.jpg)
2007/200820
Escrita de valores numa janela
Para escrever informação numa janela:
JOptionPane.showMessageDialog (null, “mensagem”);
![Page 21: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/21.jpg)
2007/200821
Escrita de valores no ecrã
int x = 3;System.out.print(x);System.out.print(2);
double x = 2.0;System.out.println(x);System.out.println(3.0);
32
2.03.0
ecrã
![Page 22: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/22.jpg)
2007/200822
Leitura de valores do teclado
Até há pouco tempo não existia nos packages da linguagem
um método directo em JAVA para ler informação do teclado.
Era necessária uma sequência de várias operações, por
exemplo:
String s = ""; char c;
try { do { c = (char)System.in.read(); s = s + c; } while (c != '\n');} catch(IOException e) {}
Só por curiosidade
![Page 23: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/23.jpg)
2007/2008Introdução à Programação - Aula 323
Leitura de valores do teclado Há cerca de dois anos, um grupo de investigadores desenvolveu uma classe, Scanner, utilizável
em qualquer máquina, que facilita a interface com o computador e o input em programas em Java. Para podermos recorrer aos métodos definidos para esta classe Scanner, basta que no nosso
programa importemos o package (ou biblioteca) desta classe, que lhes permite aceder e utilizar:
import java.util.Scanner;
e que criemos um objecto do tipo Scanner (p.e., teclado):
Scanner teclado = new Scanner (System.in); Agora, recorrendo a teclado, podemos ler diferentes dados, p.e., um valor inteiro n (existem
inúmeros métodos: de leitura, pesquisa, etc.):
int n = teclado.nextInt();
: Teclado.tipoLido(), ex:int x = Teclado.intLido();char c = Teclado.charLido();
![Page 24: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/24.jpg)
2007/200824
Leitura de valores do teclado Outro método para ler informação do teclado (sequência de operações) ... ex:
public static void main (String[] args) throws Exception
/* e System.out.println("Erro de leitura");*/ { InputStreamReader leitor = new InputStreamReader (System.in);
BufferedReader input = new BufferedReader(leitor);
System.out.print("Introduza um inteiro positivo: ");String linha = input.readLine();int m = Integer.parseInt(linha);
System.out.print("Introduza outro inteiro positivo: ");linha = input.readLine();int n = Integer.parseInt(linha);
Por agora abreviaremos as instruções de leitura com: teclado.nextTipo() (sendo teclado uma variável pré-definida por nós)
Só por curiosidade
![Page 25: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/25.jpg)
2007/200825
Leitura de valores de uma janela
É possível também usar uma janela para ler valores (p.e., uma frase ou cadeia de caracteres - String) a partir do teclado:
import javax.swing.JOptionPane;
public class Janelas { public static void main(String[] parametros) {
String lida = JOptionPane.showInputDialog("Insira uma frase: ");String lida = JOptionPane.showInputDialog("Insira uma frase: ");
if (lida != null) JOptionPane.showMessageDialog(null, "Escreveu: " + lida);
}
}
![Page 26: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/26.jpg)
2007/200826
Wrappers – objectos com funcionalidades
semelhantes às de um tipo primitivo É possível considerar um valor de uma classe primitiva como se fosse um
objecto. Para cada um dos oito tipos primitivos em Java existe, associada,
uma wrapper class – com variáveis do correspondente tipo primitivo.
Entre as funcionalidades das wrapper classes encontramos várias rotinas
– termo que passaremos a designar por métodosmétodos – como por exemplo:
int i = Integer.parseInt(“123”);
// para converter umaString num valor inteiro
Em geral, podemos recorrer a:
tipo v = Tipo.parseTipo();
i = 123
![Page 27: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/27.jpg)
2007/200827
Criação de Objectos – abordagem provisória*
Nota * : desenvolveremos esta questão mais tarde, quando abordarmos Classes
Declaração de um objecto (p.e. uma variável) ClasseDoObjecto nomeDoObjecto;( p.e., int numero; )
( p.e., int numero = 5; )
Criação de um objecto (p.e. uma variável)nomeDoObjecto = new ClasseDoObjecto (parâmetros);( p.e., Integer i = new Integer (i); )
( p.e., Integer i = new Integer (5); )
Esta declaração somente cria espaço para armazenar um endereço de
memória onde um objecto do tipo declarado possa ser guardado (o valor
do objecto não foi ainda atribuído)
A criação de um objecto é feita através do
operador new (que o inicializa devidamente) *
![Page 28: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/28.jpg)
2007/200828
Instruções
Uma instrução em Java pode ser da forma
expressão;
Uma expressão é constituída por:
Operadores
Variáveis
Valores literais
...
![Page 29: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/29.jpg)
2007/200829
Operação de atribuição
Altera o valor de uma variável
variável = expressão;
Exemplo:
x = 4 + 8;
nome : tipo
valor
x : int
12
![Page 30: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/30.jpg)
2007/200830
Conversões (cast)
Conversões possíveis entre tipos de dados:
char «--» números inteiros
números decimais «--» números inteiros
Conversões impossíveis (por enquanto …):
boolean «--» qualquer outro tipo
referência «--» qualquer outro tipo
![Page 31: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/31.jpg)
2007/200831
Conversões (cast)
int i = 65;char c = 'a';
System.out.println(" "+i+“,"+(char)i+“,"+(float)i+" ");
System.out.println(" "+c+“,"+(int)c+“,"+(float)c+" ");
ecrã
65,A,65.0 a,97,97.0
65,A,65.0
![Page 32: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/32.jpg)
2007/200832
Operadores aritméticos (I)
+, -, *, / e %
A divisão (/) é a divisão inteira se os seus operandos forem inteiros
int x = 1 / 2; // ex. exp.java
System.out.println(x);
% significa resto da divisão inteira:
int x = 15 % 6;System.out.println(x);
0
3
![Page 33: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/33.jpg)
2007/200833
Operadores aritméticos (II)
Se os operandos forem de tipos diferentes, o operando de um tipo com menor domínio (gama de valores) é convertido para o tipo maior domínio antes do cálculo:
System.out.println(1.5 + 1);
2.5 convertido para 1.0 sem ser preciso escrever (double)
![Page 34: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/34.jpg)
2007/200834
Precedência e associatividade (I)
Regras comuns respeitadas:
System.out.println(1 + 5 * 3);
System.out.println(16 / 2 / 2);
16
4
![Page 35: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/35.jpg)
2007/200835
Precedência e associatividade (II)
Excepção: atribuição
int i = 1, j = 1;i = j = 0;System.out.println(i + “ ” + j);
Valor da atribuição é o valor da variável atribuída
int x = 0; double f = 0.0; f = x = (int)1.3;System.out.println(f + “ ” + x);
0 0
1.0 1
![Page 36: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/36.jpg)
2007/200836
Operadores relacionais e deigualdade e diferença
Operadores relacionais:
>, >=, <, <= Operador de igualdade:
== Operador de diferença:
!= O resultado é sempre um boolean
(true ou false)
![Page 37: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/37.jpg)
2007/200837
Operadores lógicos
Operadores lógicos: && : E
|| : OU
! : Negação
O resultado é sempre um boolean (true ou false) Exemplo (x está entre 0 e 10?):
boolean b = (x >= 0 && x <= 10) Exemplo (x é menor que 0 ou maior que 10?):
boolean b = (x < 0 || x > 10) // Estas expressões
boolean b = !(x >= 0 && x <= 10)// são equivalentes
![Page 38: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/38.jpg)
2007/200838
Operadores deincrementação e decrementação
++ e -- prefixos e sufixos (diferenças analisadas mais tarde)
Somar 1 a x:
++x; operador prefixo oux++; operador sufixo
nota: ex. em exp.java
1. Soma x+1 -> 4(guarda 4 em memória)
2. Põe o 4 em x
x: int
4
x: int
3
são ambas abreviaturas de: x = x + 1;
![Page 39: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/39.jpg)
2007/200839
Instrução de selecção
if(condição){ instruções_1;} else { instruções_2;}
Guarda
executada quando a condição é verdadeira
executada quando a condição é falsa
nota: ver ex. exp_if.java
![Page 40: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/40.jpg)
2007/200840
Instrução de selecção: Exemplo
//Se x<0 escreve 0 senão escreve 1
int x = 13;
if(x < 0) { x = 0; } else { x = 1; }System.out.println(x);
1
x: int
13
x: int
1
![Page 41: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/41.jpg)
2007/200841
Instrução condicional: Exemplo
int x = teclado.nextInt();
if(x >= 0 && x <= 10) { x = 0; }System.out.println(x);
80
x: int
8Abreviatura para instrução de leitura
Dados introduzidos pelo utilizador
x: int
0
![Page 42: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/42.jpg)
2007/200842
Instrução condicional: Exemplo
int x = teclado.nextInt();
if(x >= 0 && x <= 10) { x = 0; }System.out.println(x); -3
?
x: int
-3
O que apareceria no ecrã?
![Page 43: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/43.jpg)
2007/200843
A reter...
Variáveis:
Servem para guardar informação
Têm sempre tipo, nome e valor Expressões:
Combinam variáveis e operadores produzindo um valor
Instruções de selecção (if):
Servem para indicar em que condições um conjunto de instruções é executado ou não
![Page 44: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/44.jpg)
2007/200844
A ler...
Capítulos 3, 5 e 7:
Y. Daniel Liang, "Introduction to Java Programming", 5ª Edição, Prentice-Hall, 2005.ISBN: 0-13-185721 - 5
![Page 45: Aula 3](https://reader035.vdocuments.us/reader035/viewer/2022070417/568153af550346895dc1af8a/html5/thumbnails/45.jpg)
2007/200845
Aula 3: Sumário
Tipos primitivos em Java Noções sobre a representação física dos tipos Noções sobre códigos de caracteres Interpretação de valores do tipo char como inteiros Valores literais Expressões e operações Operação de atribuição: alteração do estado da memória Precedência e associatividade de operadores Instrução de selecção if else