aula 3

45
Aula 3 Variáveis, expressões, operadores e instruções de selecção

Upload: melita

Post on 25-Jan-2016

33 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: Aula 3

Aula 3

Variáveis, expressões, operadores e instruções de selecção

Page 2: Aula 3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2007/200820

Escrita de valores numa janela

Para escrever informação numa janela:

JOptionPane.showMessageDialog (null, “mensagem”);

Page 21: Aula 3

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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