450 likes | 665 Views
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... } }
E N D
Aula 3 Variáveis, expressões, operadores e instruções de selecção
Estrutura deum programa em Java /** * Estrutura básica de um programa em Java. * @author Xico */ public classNomeDoPrograma{ 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
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” Cadeia de caracteres (String) Inteiro Letra/caracter Decimal “Letras” 435.72
Variáveis • Antes da primeira utilização : • Tem de sedeclarar 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çãode um valor a uma variável
Variáveis (representação gráfica) Tipo: (int = inteiro) Nome: numero numero : int 12 Em java: int numero = 12; ou: int numero; numero = 12; Valor: 12
boolean encontrado = false; Variáveis (declaração e inicialização) Nome Valor inicial Tipo: booleano, ou seja, só pode tomar os valores falso e verdadeiro encontrado : boolean false
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 Variáveis (declaração e inicialização)
Variáveis e Identificadores • Variáveis são conhecidas pelo seu nome: • O nome da variável é umidentificador • Os identificadores não podem ser repetidos na mesma zona do programa Nota: matéria a desenvolver em aulas futuras
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.)
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!
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
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
Inteiros Exemplo: • Tipo: int • Número de bits: 32 memória int 0000 0000 0000 0000 0000 0000 0100 0001 … 65
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 float 0000 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)
Memória Cada célula temum endereço, em base hexadecimal, ex: @10b62db 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... 26 * 1 + 20 * 1
Memória A mesma memória pode ser vista a vários níveis: x:int letra:char Variáveis com nomes e tipos … … 5 ’A’ Conteúdos, assumindo tipos definidos … 5 ‘A’ … … 0 0 1 0 1 0 … 0 1 0 0 0 0 0 1 Representação binária (o que realmente lá está)
Referências/Objectos Memória dinâmica(heap) Object um_objecto = new Object(); String cadeia = new String(“ISCTE”); @10b62c9 … @10b62ca … Memória estática(stack) … @10b62db … … um_objecto : Object ‘I’ @10b62e8 Object@10b62c9 ‘S’ @10b62e9 cadeia : String @10b62ea ‘C’ String@10b62db ‘T’ @10b62eb ‘E’ @10b62ec
37512375-12 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); ecrã
Escrita de valores numa janela • Para escrever informação numa janela: JOptionPane.showMessageDialog (null, “mensagem”);
32 2.03.0 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); ecrã
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
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(); Introdução à Programação - Aula 3
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
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); } }
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”); // para converter umaString num valor inteiro Em geral, podemos recorrer a: tipo v = Tipo.parseTipo(); i = 123
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; ) • 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) * Nota * : desenvolveremos esta questão mais tarde, quando abordarmos Classes
Instruções • Uma instrução em Java pode ser da forma expressão; • Uma expressão é constituída por: • Operadores • Variáveis • Valores literais • ...
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
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
65,A,65.0 a,97,97.0 65,A,65.0 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ã
0 3 Operadores aritméticos (I) • +, -, *, / e % • A divisão (/) é a divisão inteira se os seus operandos forem inteiros int x = 1 / 2; // ex. exp.javaSystem.out.println(x); • % significa resto da divisão inteira: int x = 15 % 6;System.out.println(x);
2.5 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); convertido para 1.0 sem ser preciso escrever (double)
16 4 Precedência e associatividade (I) • Regras comuns respeitadas: System.out.println(1 + 5 * 3);System.out.println(16 / 2 / 2);
0 0 1.0 1 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);
Operadores relacionais e deigualdade e diferença • Operadores relacionais: • >, >=, <, <= • Operador de igualdade: • == • Operador de diferença: • != • O resultado é sempre um boolean (true ou false)
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
x: int x: int 4 3 Operadores deincrementação e decrementação • ++ e -- prefixos e sufixos (diferenças analisadas mais tarde) • Somar 1 a x: ++x; operador prefixooux++; operador sufixo nota: ex. em exp.java • Soma x+1 -> 4(guarda 4 em memória) • Põe o 4 em x são ambas abreviaturas de: x = x + 1;
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
//Se x<0 escreve 0 senão escreve 1 int x = 13; if(x < 0) { x = 0; } else { x = 1; } System.out.println(x); x: int x: int 13 1 Instrução de selecção: Exemplo 1
int x = teclado.nextInt(); if(x >= 0 && x <= 10) { x = 0; } System.out.println(x); x: int x: int 8 0 Instrução condicional: Exemplo Abreviatura para instrução de leitura 8 0 Dados introduzidos pelo utilizador
int x = teclado.nextInt(); if(x >= 0 && x <= 10) { x = 0; } System.out.println(x); x: int -3 Instrução condicional: Exemplo -3 ? O que apareceria no ecrã?
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
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
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 ifelse