APROG Algoritmia e Programação Linguagem JAVA Básico Nelson Freire (ISEP DEI-APROG 2012/13) 1/31
Linguagem Java Estrutura de um Programa Geral Básica Estruturas de Dados Variáveis Constantes Tipos de Dados Primitivos Referências Interfaces com o Utilizador Consola Gráfica Sumário Operadores Tipos Atribuição Aritméticos Relacionais Lógicos Outros Precedências Instruções Entrada Saída Atribuição Decisão Repetição Conversão de Tipos Numéricos Strings Nelson Freire (ISEP DEI-APROG 2012/13) 2/31
Linguagem Java Estrutura Geral de um Programa Programa Java Constituído por uma ou mais classes Programa Classe 1 Classe 2 Classe Constituída por um ou mais métodos Método 1 Classe n Método 2 Método m Método Código que executa tarefa Exemplos raízquadrada fatorial Nelson Freire (ISEP DEI-APROG 2012/13) 3/31
Linguagem Java Classe Principal de um Programa Classe que contém o método main (principal) Método 1 Classe 1 Método 2 Método m Programa Método 1 Classe i Método 2 Método main Classe Principal (Main Class) Método main Controla execução do programa 1º método executado Nelson Freire (ISEP DEI-APROG 2012/13) 4/31
Linguagem Java Estrutura Básica de um Programa package nome; import nomecompletoclasse; public class NomePrograma { public static void main(string[] args){ // corpo do método // Classe principal ; nomeprograma c/ letra inicial maiúscula // cabeçalho do método main ; é imutável // significa comentário ( código fonte. Não é executado ) Java distingue letras maiúsculas das minúsculas Declaração package Especifica nome da package a que pertencerá nova classe Packages permitem organizar classes Semelhante às pastas dos sistemas de ficheiros que facilitam a gestão de ficheiros Concretamente, são pastas dos sistemas de ficheiros Declaração import Permite à nova classe usar classes pertencentes a outras packages Nome completo de uma classe nome da package seguido do nome da classe Exemplo: import java.util.scanner; // java.util é package da classe Scanner Modificador de acesso public Especifica se classe/método pode ou não ser usada por outras classes Classes/métodos públicos podem ser usados por outras classes Nelson Freire (ISEP DEI-APROG 2012/13) 5/31
Linguagem Java Estruturas de Dados : categorias 1/3 Categorias Variáveis // valor pode variar durante execução do programa Constantes // valor é constante durante execução do programa Nelson Freire (ISEP DEI-APROG 2012/13) 6/31
Linguagem Java Estruturas de Dados : variáveis 2/3 Declaração de Variáveis Sintaxe // para N variáveis do mesmo tipo Tipo_de_Dado variável_1[=valor inicial] [,, variável_n[=valor inicial] ] ; [...] = opcional Exemplos int x; // tipo int guarda inteiros; por omissão, variáveis numéricas inicializadas a 0 int z=5; int x=5, y, z=1; // variável declarada e inicializada; = é operador de atribuição // múltiplas variáveis, do mesmo tipo, declaradas na mesma linha Local Em qualquer parte do corpo do método Boa regra prática Mais perto da utilização package nome; import nomecompletoclasse; public class NomePrograma { public static void main(string[] args){ int x;... int y = 10;... Nelson Freire (ISEP DEI-APROG 2012/13) 7/31
Linguagem Java Estruturas de Dados : constantes 3/3 Declaração de Constantes Sintaxe // para N constantes do mesmo tipo final Tipo_de_Dado constante_1=valor [,, constante_n=valor] ; [...] = opcional Exemplos final int X=8; final int X=9, FATOR=20; // por convenção, nomes em maiúsculas // múltiplas constantes, mesmo tipo, declaradas na mesma linha Local Qualquer parte do corpo do método Boa regra prática Mais perto da utilização package nome; import nomecompletoclasse; public class NomePrograma { public static void main(string[] args){ final int X=8;... final int FATOR = 20;... Nelson Freire (ISEP DEI-APROG 2012/13) 8/31
Linguagem Java Tipos de Dados : classificação 1/3 Um Tipo de Dados Define Conjunto de dados Conjunto de operações possíveis sobre esses dados Tipos de Dados são Classificados como Primitivos // dados são valores simples // Ex: valores inteiros e valores reais Referências (ou Não-Primitivos) // dados são referências de memória de objetos // referência = endereço // definidos por classes // Ex: classe String - guarda texto Nelson Freire (ISEP DEI-APROG 2012/13) 9/31
Linguagem Java Tipos de Dados : primitivos 2/3 Categorias Inteiros: byte 1 byte (-128, 127) short 2 bytes (-32 768, 32 767) int 4 bytes (-2 147 483 648, 2 147 483 647) long 8 bytes (-9x10 18, 9x10 18 ) Reais: float 4 bytes (-/+ 3.4 x 10 38 ) Outros: char boolean double 8 bytes (-/+ 1.7 x 10 308 ) Nomes em minúsculas Exemplos char c = 'R', opcao= 'a'; boolean flag = false; double nota = 18.5; // carateres são delimitados por plicas // valores lógicos: false e true // separador decimal é o. (ponto) RAM... Variável de Tipo Primitivo Guarda um valor simples x 5... Ex: int x = 5; Conteúdo de variável de tipo primitivo Nelson Freire (ISEP DEI-APROG 2012/13) 10/31
Linguagem Java Tipos de Dados : referências 3/3 Definidos por Classes Exemplos String Scanner Formatter // guarda texto; ver slides Java - Classes // leitura do teclado da consola // escrita formatada na consola Nomes de classes iniciadas com letra maiúscula Variável de Tipo Referência Exemplos String cidade; String nome = "Nico"; String ave = "águia"; Guarda uma referência de objeto da classe declarada Referência = endereço de memória Considerada objeto Exemplos nome ave ave RAM... referência de objeto... águia... Objeto da Classe String Conteúdo de variável de tipo referência Nelson Freire (ISEP DEI-APROG 2012/13) 11/31
Linguagem Java Tipos Consola Interfaces com o Utilizador Interface Textual Interface Gráfica Caixas de Diálogo Entrada Saída Nelson Freire (ISEP DEI-APROG 2012/13) 12/31
Linguagem Java Entrada de Dados - Consola 1/2 Suportada por objeto da classe Scanner // classe da package java.util package nome; import java.util.scanner; public class NomePrograma { public static void main(string[] args){ int n; long y; double x; String nome, nome_composto; Scanner ler = new Scanner(System.in); n = ler.nextint(); y = ler.nextlong(); x = ler.nextdouble(); nome = ler.next(); nome_composto= ler.nextline(); // importa classe Scanner para usar em main // declara um objeto Scanner para ler do teclado // lê um int do teclado e guarda em n // lê um long do teclado e guarda em y // lê um double do teclado e guarda em x // lê uma string do teclado e guarda em nome // lê uma linha e guarda em nome_composto Mais pormenores Slide seguinte Nelson Freire (ISEP DEI-APROG 2012/13) 13/31
Linguagem Java Entrada de Dados - Consola 2/2 Classe Scanner Serve para ler ficheiros de texto Consola tratada como ficheiro de texto Declaração de objeto Scanner Scanner ler = new Scanner(System.in); Cria objeto (instância) da classe Scanner (objeto ler) Objeto System.in representa dispositivo de entrada standard (teclado) System é classe que representa sistema de computação in é objeto da classe System que representa dispositivo de entrada padrão Por omissão, teclado Leitura Preciso invocar método do objeto Scanner adequado ao tipo de dado a ler Sintaxe: nomeobjetoscanner.nomemétodo() Exemplo: ler.nextint() // para ler int Exemplos de instruções para ler um dado e guardá-lo numa variável Leitura de inteiro do tipo int: int num = ler.nextint(); Leitura de float: float num = ler.nextfloat(); Leitura de strings: String s = ler.next(); // ex: nome simples String s = ler.nextline(); // ex: nomes compostos Nelson Freire (ISEP DEI-APROG 2012/13) 14/31
Linguagem Java Suportada pelo método showinputdialog da classe JOptionPane package nome; import javax.swing.joptionpane; public class NomePrograma { Entrada de Dados Interface Gráfica // importa classe JOptionPane public static void main(string[] args){ // lê uma string e guarda em nome String nome = JOptionPane.showInputDialog("Insira um nome:");... // lê um int e guarda em i int i = Integer.parseInt(JOptionPane.showInputDialog("Insira um inteiro:")); // lê um long e guarda em l long l = Long.parseLong(JOptionPane.showInputDialog("Insira um inteiro:"));... // lê um double e guarda em d double d = Double.parseDouble(JOptionPane.showInputDialog("Insira um real:")); // lê um float e guarda em f float f = Float.parseFloat(JOptionPane.showInputDialog("Insira um real:")); Nelson Freire (ISEP DEI-APROG 2012/13) 15/31
Linguagem Java Suportada pelos métodos print, println e printf do objeto System.out System é classe que representa sistema de computação out é objeto da classe System que representa dispositivo de saída padrão Por omissão, ecrã Métodos de escrita System.out.print("mensagem"); printf - consultar o System.out.println("mensagem"); método String.format nos System.out.printf(string_formatação, lista_parâmetros) ; slides Java-Classes package nome; public class NomePrograma { public static void main(string[] args){ System.out.print("Operação impossível!"); // Escreve mensagem e coloca cursor no fim System.out.println("Divisão por zero!!");... System.out.printf("Média=%.1f",media); Também pode ser usada a classe Formatter Saída - Consola // Escreve mensagem e coloca cursor no início da // linha seguinte // Saída formatada; Escreve a media (double) // com uma casa decimal. Exemplo: Média=15.3 Nelson Freire (ISEP DEI-APROG 2012/13) 16/31
Linguagem Java Saída Interface Gráfica Suportada pelo método showmessagedialog da classe JOptionPane Sintaxe JOptionPane.showMessageDialog(null, "mensagem"); package nome; import javax.swing.joptionpane; public class NomePrograma { public static void main(string[] args){ // importa classe JOptionPane double media; JOptionPane.showMessageDialog(null, "Não foram encontrados números pretendidos"); JOptionPane.showMessageDialog(null, "Média=" + média); // Saída não formatada... String s = String.format("Média=%.1f",media); JOptionPane.showMessageDialog(null, s); // Saída formatada Nelson Freire (ISEP DEI-APROG 2012/13) 17/31
Linguagem Java Operadores 1/2 Atribuição = // Ex: x = x + z; Aritméticos + // Soma - // Subtracção * // Produto / // Divisão real ou inteira; Divisão inteira se ambos os operandos forem inteiros. % // Resto da divisão Relacionais > // Maior >= // Maior ou igual < // Menor <= // Menor ou igual!= // Diferente == // Igual Lógicos && // AND // OR! // NOT ; Ex:!(x<0 && y>10) Outros ++ // Incrementa variável de 1 unidade; Ex: contador++ ou ++contador -- // Decrementa variável de 1 unidade; Ex: contador-- ou --contador Nelson Freire (ISEP DEI-APROG 2012/13) 18/31
Linguagem Java Operadores 2/2 Precedências dos Operadores Precedência Operadores Associatividade no mesmo nível Exemplos Maior [ ]. () chamada_método! ++ -- (cast) new * / % a / b * c (a / b) * c + - < <= > >= instanceof ==!= &&?: Menor = += -= *= /= %= a -= b += c (a -= b) += c Nelson Freire (ISEP DEI-APROG 2012/13) 19/31
Linguagem Java Sintaxe variável = expressão; Instrução de Atribuição // expressão tem de ser do tipo da variável Exemplos package nome; public class NomePrograma { public static void main(string[] args){ int x, y; double z; int d, idade; x = 5; d = idade 12; // idade e d têm de ser do mesmo tipo z = x * 10 Math.pow(2,5); // Math.pow(2,5) = 2 5 Nelson Freire (ISEP DEI-APROG 2012/13) 20/31
Linguagem Java Instruções de Decisão 1/4 Sintaxe if (condição) { // = SE... ENTÃO // acção // bloco = {... ; obrigatório para acção com mais de 1 instrução if (condição) { // acção 1 else { // acção 2 // = SE... ENTÃO... SENÃO switch(expressão) { // = CASO... SEJA // expressão tem de ser do tipo inteiro, caracter ou string case valor_1[: case valor_2:...: case valor_m] : // acção_1; break; case valor_n[: case valor_o:...: case valor_v] : // acção_2; break;... default : // acção_por_omissão; // opcional; Última escolha; Pode não ser a última Nelson Freire (ISEP DEI-APROG 2012/13) 21/31
Linguagem Java Instruções de Decisão 2/4 Exemplos package nome; public class NomePrograma { public static void main(string[] args){ int x, y, z; if (x>5) y=4; if(x>5 && x<10){ y=10; z=100; if (x>0) { System.out.println(x + "é um nº positivo"); else { System.out.println(x + "não é um nº positivo"); // bloco {... não é obrigatório para uma instrução // bloco é obrigatório por haver mais de uma instrução Nelson Freire (ISEP DEI-APROG 2012/13) 22/31
Linguagem Java Instruções de Decisão 3/4 Exemplos package nome; public class NomePrograma { public static void main(string[] args){ int x, y, z; switch(x){ case 1: case 3: z = y * 2; break; case 6: z = 12; break; case 2: case 4: case 7: y = 45; z = 23; break; default: z=50; break termina execução do switch; senão, são executadas as instruções do caso seguinte Nelson Freire (ISEP DEI-APROG 2012/13) 23/31
Linguagem Java Instruções de Decisão 4/4 Exemplos package nome; public class NomePrograma { public static void main(string[] args){ char opcao; switch(opcao){ case '1': case 'a': break; case '2': case 'a': break; case '0': case 's': case 'S' : break; default: break termina execução do switch; senão, são executadas as instruções do caso seguinte Nelson Freire (ISEP DEI-APROG 2012/13) 24/31
Linguagem Java Instruções de Repetição 1/2 Sintaxe while (condição) { // = ENQUANTO // corpo do ciclo do { // = REPETIR... ENQUANTO // corpo do ciclo while (condição); // termina com ; for(inicialização contador; condição de funcionamento; passo){ // = PARA // corpo do ciclo Nelson Freire (ISEP DEI-APROG 2012/13) 25/31
Linguagem Java Instruções de Repetição 2/2 Exemplos package nome; public class NomePrograma { public static void main(string[] args){ int c, y; Scanner ler = new Scanner(System.in); c = 1; while(c<=25){ System.out.println(c); c++; do { y = ler.nextint(); while(y>0); for(c=1; c<=25; c++){ // é um PARA(c 1 ATÉ 25 PASSO 1) System.out.println(c); for(c=25; c>=1; c--) // for(); não terminar com ponto-e-vírgula System.out.println(c); Nelson Freire (ISEP DEI-APROG 2012/13) 26/31
Linguagem Java Conversão de Tipos Numéricos 1/4 Valores Numéricos Valor Sufixo Exemplo Considerado do Tipo Sem 123456789 int INTEIRO L 123456789L l 123456789l long Sem 12.34 double REAL F 12.34F f 12.34f float Nelson Freire (ISEP DEI-APROG 2012/13) 27/31
Linguagem Java Conversão de Tipos Numéricos 2/4 Tipos de Conversão Implícita Explícita (cast) Nelson Freire (ISEP DEI-APROG 2012/13) 28/31
Linguagem Java Conversão de Tipos Numéricos 3/4 Conversão Implícita Declarada implicitamente Exemplo: short x = 1389; long y = x; Usada Conversão para tipos maiores ou iguais Exceto long float Tipos Sem perda de precisão Possível perda de precisão char byte short int long float double Nelson Freire (ISEP DEI-APROG 2012/13) 29/31
Linguagem Java Conversão de Tipos Numéricos 4/4 Conversão Explícita Declarada explicitamente Através de um cast Exemplo: short x = 1389; long y = (long) x; Sintaxe de um cast (tipo_alvo) nome_variável Exemplo: double x = 13.89; int y = (int) x; // Parte decimal é truncada (y=13) Tipos Sem perda de precisão Possível perda de precisão char byte short int long float double Nelson Freire (ISEP DEI-APROG 2012/13) 30/31
Linguagem Java Inserir numa String Strings Newline "...\n... " TAB "...\t... " Aspas "...\"... " Exemplos package nome; public class NomePrograma { public static void main(string[] args){ System.out.println("\n MENU "); System.out.println("\t 1 Ler um nome"); System.out.println("\t 2 \"Eliminar\" elementos do array"); Nelson Freire (ISEP DEI-APROG 2012/13) 31/31