Prévia do material em texto
AULA TEÓRICA 4 Tema 2. Introdução a programação em Java (JVM, JDK) (cont.) Ø Tipos de dados básicos (primitivos): u representação de números inteiros; u representação de números decimais; u representação de valores lógicos. u representação de caracteres. Ø Classe String. Ø Expressões. Ø Operadores de incrementação e de decrementação unária de variáveis. Ø Classe Math. Ø Conversões do tipo Ø Expressões lógicas Tema 3. Instruções básicas de entrada e saída 1 Tipos de dados básicos (primitivos) Um tipo de dados é definido pela gama de valores que pode representar e pelas operações que sobre eles se podem efectuar. Java permite tratar 8 tipos de dados predefinidos: – boolean, – char, – byte, – short, – int, – long, – float, – double. 2 Representação de números inteiros A representação de números inteiros é assegurada pelos seguintes tipos: Tipo Memória Menor valor Maior valor ocupada byte 8 bits -128 127 short 16 bits -32 768 32 767 int 32 bits -2 147 483 648 (-231) 2 147 483 647 (231-1) long 64 bits -263 (263-1) Para alem de representação decimal, os números podem também ser representados nas bases octal e hexadecimal. Para isso usam-se prefixos: 0 – para octal e 0x para hexadecimal. Por exemplo: int peso = 0x12a; 3 Representação de números decimais A representação de números decimais é assegurada pelos seguintes tipos: Tipo Memória Menor valor Maior valor ocupada float 32 bits -3.4 x 1038 3.4 x 1038 double 64 bits -1.7 x 10308 1.7 x 10308 Os valores reais podem ser representados usando a notação decimal (por ex. 34.054) ou a notação exponencial (por ex. 2.5E-6 que representa o número 2,5 x 10-6). Em qualquer dos casos, o número pode ser seguido das letras f (ou F) ou d (ou D) indicando que se pretende o seu armazenamento como float ou como double. A ausência de indicação implica que o número seja considerado como double. 4 Representação de valores lógicos O tipo boolean é um tipo de dados para guardar valores lógicos, nomeadamente true (verdade) e false (falso). Tipo Memória ocupada Valores boolean 1 bit true ou false Instrução de atribuição A atribuição permite armazenar um valor numa variável. Esse valor pode ser fornecido directamente ou resultar do cálculo de uma expressão. int alunos = 80; alunos= 2 * alunos; 5 Representação de caracteres O tipo char é usado para guardar caracteres individuais que são representados internamente no computador pelos seus códigos ASCII. A declaração de variáveis deste tipo é feita da seguinte forma: char letra; ou char letra = 'a'; O uso de caracteres é feito entre apóstrofos ' '. Por exemplo: letra = 'M'; Uma vez que as variáveis do tipo char armazenam códigos, que são números, é possível fazer algum tipo de aritmética com estes var iáveis , nomeadamente incrementações e decrementações. Tipo Memória ocupada Valores char 16 bits Qualquer caracter pertencente ao Unicode 6 7 ! Classe String A classe String é uma das classes predefinidas da Java e serve para manipular cadeias de caracteres. Declaração de uma variável do tipo String Para criar declarar uma variável da classe String pode usar uma instrução na forma abreviada: String frase = "Programar aprende-se programando"; Métodos da classe String Existem vários métodos que permitam manipular dados do tipo String e que vão ser aprendidos mais tarde. 8 Expressões Uma expressão é uma sequência de operadores e de valores. A linguagem Java tem definido um conjunto de operadores, aritméticos e lógicos, que permitem a construção de expressões. Operador Prioridade Operação * 1 Multiplicação / 1 Divisão % 1 Resto da divisão + 2 Adição - 2 Subtração M Operador divisão apresenta comportamentos diferentes em função do tipo de operandos a que é aplicado. No caso de algum dos operandos ser real (float ou double), o resultado será também um número real. Por exemplo: double x = 10/4.0; //x ← 2.5 9 M No entanto, se ambos os operadores forem inteiros, o resultado será também um inteiro, pelo que a parte fraccionária do resultado é desprezada. Assim, int y = 10/4; //y ← 2 O operador % permite calcular o resto de uma divisão. Por exemplo: int z = 13 % 4; //z ← 1 Ainda que este operador seja geralmente mais útil para calcular o resto de divisões inteiras, o Java permite também a sua utilização com operandos reais. Por exemplo: double f = 8.6 % 2.0; //f ← 0.6 Operadores de incrementação e de decrementação unária de variáveis ++ (soma 1 ao seu operando) -- (subtrai 1 ao seu operando) 10 Exemplo: conta++; //pós-incremento conta--; //pós-decremento ou ainda: ++conta; //pré-incremento --conta; //pre-decrimento A distinção entre as duas formas destes operadores, antes ou depois do operando, só é relevante quando fazem parte de uma expressão maior. Por exemplo, supondo que a variável num tem o valor 7, a expressão x = ++num; incrementa o valor de num (para 8) e depois atribui-o a x (por isso x passa a ter o valor 8). Se for x = num++; primeiro é feita a atribuição de num a x (x fica com o valor 7) e só depois é que é feita a incrementação de num. 11 Java fornece vários operadores de atribuição (+=, -=, *=, /=) para abreviar expressões de atribuição. Por exemplo, podemos abreviar a instrução c = c + 3; como c += 3; O operador += adiciona o valor da expressão à direita do operador ao valor da variável à esquerda do operador, e armazena o resultado na variável à esquerda do operador. Suponha: int c = 3, d = 5, e = 4, f = 5; Operador de Expressão de Explicação Atribui += c += 7 c = c+7 10 a c -= d -= 4 d = d-4 1 a d *= e *= 5 e = e*5 20 a e /= f /= 3 f = f/3 1 a f 12 Classe Math O JDK (Java Development Kit) inclui um largo conjunto de classes e métodos que podem ser utilizados para variados fins. Os métodos pré-programados da classe Math permitem realizar certos cálculos matemáticos comuns. Por exemplo, Math.random() gere um número aleatório entre 0 e 1, Math.sin(a) calcula o seno de um ângulo. É aconselhável a consulta da documentação do JDK para obter uma lista completa de metodos existentes no Math. . . . . int base = 3, expoente = 4; double resultado = Math.pow(base,expoente); . . . 13 Conversões de tipo O tipo do resultado de uma expressão aritmética depende do tipo dos seus operandos. Se todos eles forem do mesmo tipo, o resultado será também desse tipo. No caso contrário devem ser feitas as conversões de tipo. Algumas são feitas automaticamente e de modo a que não haja perda de informação, pelo que nem todas as transformações são possíveis. A cadeia de conversão automática do compilador é a seguinte: byte > short > int > long > float > double int var_int = 10, result_int; double var_double = 5.9, result_double; result_double = var_int + var_double; result_int = var_int + var_double; result_int = (int) (var_int + var_double); 14 Expressões lógicas Existem tambem operadores relacionais e operadores lógicos. Estes operadores permitem a construção de expressões que têm como resultado um valor lógico, true ou false. Operadores relacionais: >, <, >=, <=, == (igual a), != (diferente de) Operadores lógicos: && (conjunção), || (disjunção), ! (negação) O operador && tem dois operandos e devolve true apenas seambos os operadores forem true, caso contrário devolve false. A operação de negação recebe apenas um operando lógico e inverte o seu valor. É comum que os operandos utilizados pelos operadores lógicos resultem de expressões que envolvem operadores relacionais. Qual é o resultado de expressão (10 > 5 && 4 != 3) ? A B A && B A | | B F F F F F T F T T F F T T T T T 15 Tema 3. Instruções básicas de entrada e saída As instruções de entrada servem para obter valores do exterior do programa, por exemplo, do teclado. Quando um computador executa um programa, chegará a resultados e que o utilizador desejará visualizar. Para isso são necessários instruções de saída de dados. Saída de dados (para ecrã) A escrita para o ecrã pode ser feita utilizando os métodos (subprogramas) print ou println existentes na System.out, que é conhecido como objecto de saída padrão. 16 Para que possa ser escrita uma mensagem no ecrã, estes subprogramas devem receber como parâmetro (argumento) a mensagem a escrever, por exemplo: . . . . System.out.print ("Bom dia! "); byte dias = 30; Sytem.out.print("Abril tem "+dias+" dias"); . . . . Entrada de dados A linguagem de Java foi concebida essencialmente para o desenvolvimento de aplicações para execução em ambientes gráficos, onde a entrada de dados é assegurada por diálogos especializados. A leitura de dados a partir do teclado é complexa para ser explicada detalhadamente numa fase introdutória da aprendizagem da programação. Mais tarde voltaremos a este assunto. Vamos ver algumas formas de leitura. 17 Exemplo1 de leitura do teclado e visualização de um número inteiro (utilizando caixas de diálogo pré-definidas) : import javax.swing.JOptionPane; public class ExemploLeituraTeclado1 { public static void main(String[] args) { int num = Integer.parseInt(JOptionPane.showInputDialog ("Introduza um numero inteiro:")); JOptionPane.showMessageDialog(null,"O numero introduzido foi:"+ num); } } Exemplo2 de leitura do teclado e visualização na consola de um número inteiro: import java.io.*; public class ExemploLeituraTeclado2 { public static void main (String[] args) throws IOException { BufferedReader x = new BufferedReader(new InputStreamReader(System.in)); int num; System.out.println("Introduza um numero inteiro: "); num = Integer.parseInt(x.readLine()); System.out.println("O numero introduzido foi: "+num); } } 18 Referência bibliográfica: António José Mendes; Maria José Marcelino. “Fundamentos de programação em Java 2”. FCA. 2002. Carriço, José; Carriço, António. "Computadores, Tecnologias e sistemas de Informação- O Núcleo de Sistema“. Centro de Tecnologias de Informação Ltd. Lisboa. 1997 Carriço, José; Carriço, António. "Computadores, Tecnologias e sistemas de Informação- Periféricos, Internet e multimédia“. Centro de Tecnologias de Informação Ltd. Lisboa. 1997. Carriço, José; Carriço, António. "Computadores, Tecnologias e sistemas de Informação- Tecnologias de Software“. Centro de Tecnologias de Informação Ltd. Lisboa.1997. Elliot Koffman; Ursula Wolz. “Problem Solving with Java”. 1999. John R. Hubbard. “Theory and problems of programming with Java”. Schaum’s Outline series. McGraw-Hill. H. Deitel; P. Deitel. “Java, como programar”. 4 edição. 2003. Bookman. Rui Rossi dos Santos. “Programando em Java 2– Teoria e aplicações”. Axcel Books. 2004 19 TPC Escrever um programa em Java para resolução dos seguintes problemas: Ø permitir visualizar no ecrã mensagem de boas vindas. Ø declarar dois valores: 10,75 e 300,1. Achar o produto deles e visualizar o resultado na tela acompanhando pela respectiva mensagem. Ø cálcular área de um círculo. Ø calcular o valor corresponde a idade introduzida em dias, horas e semanas. 20