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
comentários
*/
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
2
2007/2008
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
Inteiro
‘a’
Letra/caracter
“Letras”
3
435.72
Decimal
435.72
“Letras”
Cadeia de
caracteres
(String)
2007/2008
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:


4
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
2007/2008
Variáveis (representação gráfica)
Nome:
numero
Tipo:
(int = inteiro)
numero : int
12
Em java:
int numero = 12;
ou:
Valor: 12
int numero;
numero = 12;
5
2007/2008
Variáveis (declaração e inicialização)
Nome
Valor inicial
boolean encontrado = false;
Tipo: booleano, ou seja,
só pode tomar os valores
falso e verdadeiro
encontrado : boolean
false
6
2007/2008
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)

7
Interpretação do conteúdo baseada no tipo associado
2007/2008
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
8
2007/2008
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.
9

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.)
2007/2008
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!
10
2007/2008
Tipos de dados


11
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
2007/2008
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
12
2007/2008
Inteiros
Exemplo:

Tipo: int

Número de bits: 32
Tipo
Tamanho
byte
8
short
16
int
32
long
64
memória
0000 0000 0000 0000 0000 0000 0100 0001 …
13
int
65
2007/2008
Valores decimais (ou em vírgula flutuante)
Exemplos:

Tipo: float

Tipo: double

Número de bits: 32

Número de bits: 64

float x = 0.0f; (ou 0.0F)

double x = 0.0; (ou 0.0d ou 0.0D)
( por omissão um real é double; para ser explicitamente float poderá inicializar-se a var. desta forma )
memória
0000 0000 0000 0000 0000 0000 0100 0001 …
14
float
9.1E-44
2007/2008
Memória
Os 32 bits de memória:
Cada célula tem
um endereço, em
base hexadecimal,
ex: @10b62db
0000 0000 0000 0000 0000 0000 0100 0001
podem corresponder a:
26 * 1
+

(char) ‘A’ … apenas considera os 16 à direita

(int) 65

(float) 9.1E-44
20 * 1
Nota: o que está num endereço de memória pode ser igual ... mas ser interpretado de formas diferentes...
15
2007/2008
Memória
A mesma memória pode ser vista a vários níveis:
…
x:int
letra:char
5
’A’
…
0 … 0
1
‘A’
5
0
1
Variáveis com nomes
…
e tipos
Conteúdos, assumindo
tipos definidos
…
0 …
0
1
0
0
0
0
0
1
Representação binária (o que realmente lá está)
16
2007/2008
Referências/Objectos
Object um_objecto = new Object();
String cadeia = new String(“ISCTE”);
Memória dinâmica
(heap)
@10b62c9
…
@10b62ca
…
…
Memória estática
(stack)
@10b62db
um_objecto : Object
…
@10b62e8
Object@10b62c9
cadeia : String
String@10b62db
17
…
‘I’
@10b62e9
‘S’
@10b62ea
‘C’
@10b62eb
‘T’
@10b62ec
‘E’
2007/2008
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}
18
2007/2008
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
ecrã
Ex: System.out.println(375);
int x = 12;
System.out.println(x);
375
12
375-12
System.out.println(“ “ + 375 + “-” + x);
19
2007/2008
Escrita de valores numa janela

Para escrever informação numa janela:
JOptionPane.showMessageDialog (null, “mensagem”);
20
2007/2008
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);
21
ecrã
32
2.0
3.0
2007/2008
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) {}
22
Só por
curiosidade
2007/2008
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();
23
Introdução à Programação - Aula 3
2007/2008
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
{
Só por
curiosidade
/* 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)
24
2007/2008
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: ");
if (lida != null)
JOptionPane.showMessageDialog(null, "Escreveu: " + lida);
}
}
25
2007/2008
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étodos – como por exemplo:
int i = Integer.parseInt(“123”);
i = 123
// para converter umaString num valor inteiro
Em geral, podemos recorrer a:
tipo v = Tipo.parseTipo();
26
2007/2008
Criação de Objectos – abordagem provisória*

Declaração de um objecto (p.e. uma variável)
ClasseDoObjecto nomeDoObjecto;
( p.e., int numero; )
( p.e., int numero = 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)
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); )
A criação de um objecto é
feita através do operador
new (que o inicializa
devidamente) *
Nota * : desenvolveremos esta questão mais tarde, quando abordarmos Classes
27
2007/2008
Instruções

Uma instrução em Java pode ser da forma
expressão;

28
Uma expressão é constituída por:

Operadores

Variáveis

Valores literais

...
2007/2008
Operação de atribuição

Altera o valor de uma variável
nome : tipo
variável = expressão;
Exemplo:
x = 4 + 8;
29
valor
x : int
12
2007/2008
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
30
2007/2008
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
31
65,A,65.0
a,97,97.0
2007/2008
Operadores aritméticos (I)

+, -, *, / e %

A divisão (/) é a divisão inteira se os seus operandos
forem inteiros
int x = 1 / 2;
//
System.out.println(x);

0
% significa resto da divisão inteira:
int x = 15 % 6;
System.out.println(x);
32
ex. exp.java
3
2007/2008
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
33
convertido para 1.0 sem ser
preciso escrever (double)
2007/2008
Precedência e associatividade (I)

Regras comuns respeitadas:
System.out.println(1 + 5 * 3);
16
System.out.println(16 / 2 / 2);
4
34
2007/2008
Precedência e associatividade (II)

Excepção: atribuição
int i = 1, j = 1;
i = j = 0;
System.out.println(i + “ ” + j);

0
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);
35
0
1.0
1
2007/2008
Operadores relacionais e de
igualdade e diferença

Operadores relacionais:


Operador de igualdade:


36
==
Operador de diferença:


>, >=, <, <=
!=
O resultado é sempre um boolean
(true ou false)
2007/2008
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
37
2007/2008
Operadores de
incrementação e decrementação

++ e -- prefixos e sufixos
(diferenças analisadas mais tarde)

Somar 1 a x:
++x; operador prefixo
ou
x++; operador sufixo
nota: ex. em exp.java
são ambas abreviaturas de:
x = x + 1;
x: int
3
1. Soma x+1 -> 4
(guarda 4 em memória)
2. Põe o 4 em x
x: int
4
38
2007/2008
Instrução de selecção
if(condição){
Guarda
instruções_1;
} else {
instruções_2;
executada quando
a condição é verdadeira
}
executada quando
a condição é falsa
39
nota: ver ex. exp_if.java
2007/2008
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);
40
x: int
13
1
1
2007/2008
Instrução condicional: Exemplo
x: int
Abreviatura para
instrução de leitura
8
x: int
int x = teclado.nextInt();
if(x >= 0 && x <= 10) {
x = 0;
}
System.out.println(x);
0
8
0
Dados introduzidos
pelo utilizador
41
2007/2008
Instrução condicional: Exemplo
x: int
int x = teclado.nextInt();
-3
if(x >= 0 && x <= 10) {
x = 0;
}
System.out.println(x);
-3
?
O que apareceria no ecrã?
42
2007/2008
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):

43
Servem para indicar em que condições um
conjunto de instruções é executado ou não
2007/2008
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
44
2007/2008
Aula 3: Sumário









45
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
2007/2008
Download

int - padoca