aula 3

Post on 25-Jan-2016

33 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

Aula 3

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

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

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

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

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;

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

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

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

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.)

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!

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

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

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

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)

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+

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’… …

… …

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)

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}

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ã

2007/200820

Escrita de valores numa janela

Para escrever informação numa janela:

JOptionPane.showMessageDialog (null, “mensagem”);

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ã

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

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();

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

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);

}

}

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

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) *

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

...

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

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

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

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

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)

2007/200834

Precedência e associatividade (I)

Regras comuns respeitadas:

System.out.println(1 + 5 * 3);

System.out.println(16 / 2 / 2);

16

4

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

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)

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

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;

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

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

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

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ã?

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

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

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

top related