Capítulo 2. Fundamentos de Java 1/52
Índice 2.1 - Variáveis Tipos Escopo Inicialização Casting Literais 2.2 - Operadores Aritméticos Relacionais Bit a Bit De atribuição 2.3 - Expressões, statements e blocos 2.4 - Funções matemáticas A classe math Indice 2.5 - Controlo de Fluxo If Else Switch Case While For 2.6 - Strings 2.7 - Arrays Arrays unidimensionais Arrays bi-dimensionais 2/52
Índice 2.1 - Variáveis Tipos Escopo Inicialização Casting Literais 2.2 -- Operadores Aritm Aritmééticos ticos Relacionais Bit a Bit De atribuiçção 2.3 -- Expressões, statements e blocos 2.4 -- Funções matemáticas ticas A A classe math 2.1 Variáveis 2.5 -- Controlo de Fluxo If If Else Switch Switch Case While For 2.6 -- Strings 2.7 -- Arrays Arrays unidimensionais Arrays bi- -dimensionais 3/52
2.1 Variáveis Tipos de variáveis em JAVA. Em Java, campos ou variáveis designam a mesma coisa. int cadence = 0; int CurrentSpeed = 0; int gear = 1; Como visto, o objecto guarda o seu estado em variáveis Tipo primitivo ou pré-definido. -Usado em valores simples que não permitem decomposição (tais como números e caracteres) -Exemplos: 1, 1.0 e a são valores do tipo primitivo int, double e char respectivamente -Quatro tipos inteiro (byte, short, int e long) em que int é o mais comum. -Dois tipos em virgula flutuante (float e double) onde double é o mais comum -Tipo caractar (char) e Tipo boleana (boolean) Tipo classe (ou referência) -Usado em objectos que contêm dados e sobre os quais se podem executar acções (métodos) -Exemplo: A disciplina de programação avançada é um valor do tipo classe String 4/52
2.1 Variáveis Tipos de variáveis em JAVA Variáveis tipo primitivo em Java bit sinal + 7 bit = 8bit Valor por defeito 0 0 0 0L Precisão simples Precisão dupla 0.0f 0.0d \u0000 false Representação inteiros octais e hexadecimais int decval = 26; // 26 em decimal int octval = 032; // 26 em octal int hexval = 0x1a; // 26 em hexadecimal Virgula flutuante double d1 = 123.4; // com. É d por defeito double d2 = 1.234e2; // Notação científica(e) Float f1 = 123.4f; 5/52
2.1 Variáveis Ciclo de vida e escopo das variáveis em Java (scope) É o bloco de instruções no qual a variável está acessível (viva) O Sítio onde se declara a variável determina o seu ciclo de vida Variáveis de instância (campos não estáticos). -São todas as variáveis que armazenam valores independentes para cada instância. São declaradas sem a palavra static. -Exemplo: Variável CurrentSpeed de uma bicicleta é independente da CurrentSpeed de outra bicicleta { int CurrentSpeed = 0;... } 6/52
2.1 Variáveis Ciclo de vida e escopo das variáveis em Java (scope) Variáveis de classe (campos estáticos). -Só existe uma cópia desta variável em todo o programa independentemente do número de vezes que a classe é instanciada. São declaradas com a palavra static. -Exemplo: static int numgears = 6 static final int numgears = 6 Variáveis locais (dentro de métodos). -As variáveis declaradas dentro dos métodos têm escopo local ao método. Só podem ser acedidas pelo método e não são visíveis pelo resto da classe. Não têm qualquer palavra específica para declaração. Parâmetros (Entrada ou argumentos dos métodos). Conceptualmente todas as bicicletas têm 6 velocidades Ao ser alterado, afecta todas as instâncias da classe. Neste caso a variável não pode nunca ser alterada. O número de velocidades nunca se altera. -Os parâmetros são as variáveis de entrada dos métodos. São sempre classificados como variáveis e não como campos. -Exemplo: public static void main(string[] args). Método main espera argumerntos do tipo String 7/52
2.1 Variáveis Inicialização de variáveis As variáveis do tipo primitivo ou de classe podem receber um valor inicial -Apesar de não ser obrigatório é boa prática inicializar todas as variáveis. int numero = 0; int a,b,c,d,e; a=b=c=d=e=0; Método 1 Método 2 Conversão de variáveis Conversão automática Exemplo: Uma variável do tipo int pode ser automáticamente convertida noutra do tipo float, long ou double (maior precisão) 8/52
2.1 Variáveis Conversão de variáveis Conversão manual ou casting -A conversão de um dado de um tipo abrangente noutro menos abrangente (mais específico) não se faz de forma automática, pois pode implicar perda de informação Exemplo errado: float y = 4.56f; int x = y; Dá erro alertando para a perda de precisão na conversão Exemplo correcto: float y = 4.56f; int x = (int) y; CASTING -> Neste caso só estamos interessados na parte inteira do valor de y. 9/52
2.1 Variáveis Tipos de variáveis em JAVA Literais ou constantes em Java. A declaração é igual às variáveis, mas com a keyword final. -Constanstes ou literais inteiros (int): 0, -10, +65, 12000 final int K = 2; -Constantes do tipo char levam pelicas na atribuição final char B = x ; O valor das constantes não pode ser alterado Erro de compilação 10/52
Índice 2.1 -- Variáveis Tipos Escopo Inicializaçção Casting Literais 2.2 - Operadores Aritméticos Relacionais Bit a Bit De atribuição 2.3 -- Expressões, statements e blocos 2.4 -- Funções matemáticas ticas A A classe math 2.2 Operadores 2.5 -- Controlo de Fluxo If If Else Switch Switch Case While For 2.6 -- Strings 2.7 -- Arrays Arrays unidimensionais Arrays bi- -dimensionais 11/52
2.2 Operadores O Valor retornado de uma operação depende do tipo de operandos envolvidos Em Java os operadores estão divididos pelos seguintes grupos. -Aritméticos -Relacionais e lógicos -Bit a bit -De atribuição 12/52
2.2 Operadores Operadores aritméticos Binários. Unários Notação: pré fixada ++x pós fixada x++ 13/52
2.2 Operadores Operadores relacionais Comparação!! Exemplo : a!= b Devolve true se a for diferente de b. a == b Devolve true se a for igual a b. 14/52
2.2 Operadores Operadores lógicos Exemplo : (a && b) == 0; Devolve true se a for zero e se b for zero. 15/52
2.2 Operadores Operadores bit a bit Para operações digitais binárias É dividor por 2 op2 É multiplicar por 2 op2 Em Java o bit de sinal é o bit mais à esquerda: 0: Representa um número positovo 1: Representa um número negativo Mais info em: http://www.javaranch.com/journal/200 406/ScjpTipLine-BitShifting.html Os operadores shift (<<,>>,>>>) servem para deslocar um determinado nº de bits para a esquerda ou direira. Serve por exemplo para converter Bytes -> Kbytes -> Mbytes acrescentando ou retiranto 10 zeros int byte = 1; long mbytes = byte << 20; System.out.println(mbytes); 1 Kbyte = 2 10 byte e 1 Mbyte = 2 20 bytes 1*2 20 -> Acrescentar 20 zeros é multiplicar por 2 20. Imprime 1048576 = 2 20 16/52
2.2 Operadores Operadores bit a bit Notas sobre deslocação de bits Deslocar b à direita é dividir por 2 b. Acrescentam-se b zeros à esquerda e desaparecem b zeros à direita 13 (dec) 6 (dec) byte b = 13; b = (byte) (b >> 1); 0 0 0 0 1 1 0 1 = 0 0 0 0 0 1 1 0 13 (dec) 3 (dec) byte b = 13; b = (byte) (b >> 2); 0 0 0 0 1 1 0 1 = 0 0 0 0 0 0 1 1 Deslocar b à esquerda é multiplicar por 2 b. Acrescentam-se b zeros à direita e desaparecem b zeros á esquerda 13 (dec) 26 (dec) byte b = 13; b = (byte) (b << 1); byte b = 13; b = (byte) (b << 2); 0 0 0 0 1 1 0 1 = 0 0 0 1 1 0 1 0 13 (dec) 52 (dec) 0 0 0 0 1 1 0 1 = 0 0 1 1 0 1 0 0 Note-se no casting. Em Java os operadores de deslocação apenas trabalham com variáveis INT. Na deslocação, o operando da esquerda é convertido automáticamente num tipo INTEIRO 17/52
2.2 Operadores Operadores de atribuição Em Java, o operador de atribuição normal é: = -Tal como no C, existem uma série de operadores de atribuição compactos 18/52
Índice 2.1 -- Variáveis Tipos Escopo Inicializaçção Casting Literais 2.2 -- Operadores Aritm Aritmééticos ticos Relacionais Bit a Bit De atribuiçção 2.3 Expressões statements e blocos 2.3 - Expressões, statements e blocos 2.4 -- Funções matemáticas ticas A A classe math 2.5 -- Controlo de Fluxo If If Else Switch Switch Case While For 2.6 -- Strings 2.7 -- Arrays Arrays unidimensionais Arrays bi- -dimensionais 19/52
2.3 Expressões Uma expressão é: Um conjunto de variáveis, operadores e invocações de métodos As expressões: -Devolvem valores. Os operadores nelas utilizados são avaliados de acordo com prioridades int cadence = 0; anarray[0] = 100; System.out.println("Element 1 at index 0: " + anarray[0]); int result = 1 + 2; if(value1 == value2) System.out.println("value1 == value2"); Variavel result é agora 3. a+ b / c; (a + b) / c; Os parêntesis alteram a ordem natural das prioridades 20/52
2.3 Expressões Prioridades das expressões: Escala de prioridades. O valor 15 representa a maior prioridade 21/52
2.3 Expressões Prioridades das expressões: Exemplo: a * b >= c + d x * y == z && s<= t ((a * b) >= (c + d)) ((x * y) == z) && (s <= t) 1 3 2 4 5 6 7 8 22/52
2.3 Statements Statements O Statement em programação é o equivalente à frase na linguagem comum O statement forma uma unidade completa de execução de código -Os tipos de expressões seguintes transformam-se em statements terminando-as com ; -Expressóes de atribuição (=) -Expressões unárias (++ e - -) -Invocações de métodos -Expressões para criação de objectos Exemplos de statments de expressões avalue = 8933.234; // Atribuição avalue++; // Incremento System.out.println("Hello World!"); // Invocação de métodos Bicycle mybike = new Bicycle(); // criação de objectos Existem ainda statements de declaração e de controlo de fluxo. Estes últimos são vistos adiante. double avalue = 8933.234; //Statement de declaração 23/52
2.3 Blocos Blocos Blocos Bloco é um grupo de zero ou mais statements. -Os blocos são separados por chavetas. class BlockDemo { public static void main(string[] args) { boolean condition = true; if (condition) { // Início do Bloco 1 System.out.println("Condition is true."); } // Fim do bloco 1 else { // Inicio Bloco 2 System.out.println("Condition is false."); } // Fim do bloco 2 } } Bloco 1 Bloco 2 24/52
Índice 2.1 -- Variáveis Tipos Escopo Inicializaçção Casting Literais 2.2 -- Operadores Aritm Aritmééticos ticos Relacionais Bit a Bit De atribuiçção 2.3 -- Expressões, statements e blocos 2.4 - Funções matemáticas A classe math 2.4 Funções Matemáticas 2.5 -- Controlo de Fluxo If If Else Switch Switch Case While For 2.6 -- Strings 2.7 -- Arrays Arrays unidimensionais Arrays bi- -dimensionais 25/52
2.4 Funções matemáticas A classe Math Contêm um conjunto de funções matemáticas das quais algumas se listam abaixo -Esta classe define também as constantes: Math.PI e Math.E 26/52
2.4 Funções matemáticas A classe Math Exemplo: package capitulo2; public class FuncoesMatematicas01 { public static void(string args[]) { double d1=4, d2; d2 = Math.sqrt(d1); System.out.println(d2); System.out.println(Math.sin(Math.PI/2.0)); } } Output do programa: 2 1 27/52
Índice 2.1 -- Variáveis Tipos Escopo Inicializaçção Casting Literais 2.2 -- Operadores Aritm Aritmééticos ticos Relacionais Bit a Bit De atribuiçção 2.3 -- Expressões, statements e blocos 2.4 -- Funções matemáticas ticas A A classe math 2.5 Controlo de fluxo 2.5 - Controlo de Fluxo If Else Switch Case While For 2.6 -- Strings 2.7 -- Arrays Arrays unidimensionais Arrays bi- -dimensionais 28/52
2.5 Controlo de fluxo Controlo de fluxo Permite criar fluxos de execução alternativos ou repetitivos (iterativos) -Agrupamento das instruções de controlo de fluxo 29/52
2.5 Controlo de fluxo If...Else Instruções de decisão IF -Os blocos que são executados caso a condição seja verdadeira estão limitados por { } e aparecem imediatamente a seguir à condição que está limitada por parêntesis curvos ( ). Condição Blocos de execução 30/52
2.5 Controlo de fluxo Instruções de decisão IF encadeados -Exemplo para uma sequência de ifs encadeados Ex: se nota fôr 16: s = Muito Bom e sai do bloco de if 31/52
2.5 Controlo de fluxo Switch...Case Instruções de decisão Switch... Case -Comporta-se como if encadeados, mas facilita a leitura do código. Só permite comparações com igualdade e com variáveis tipo int ou char Break: Se verdade sai do bloco switch case Default: Se nenhum case for verdade Qual o Output deste programa? E se int mes = 13? 32/52
2.5 Controlo de fluxo Instruções de decisão Switch... Case -Várias entradas para o mesmo tipo de acções Várias entradas Mesma acção 33/52
2.5 Controlo de fluxo While Instruções de ciclo O ciclo while -A execução de um bloco de instruções repete-se enquanto a condição for verdadeira Atribuir valor inicial à variável de controlo Ciclo Tester critério de saída do ciclo verificando o valor da variável de controlo Neste exemplo: a vai incrementando de 1. Quando chegar a 5 sai do ciclo e continua o programa Incrementar a variável de controlo 34/52
2.5 Controlo de fluxo Instruções de ciclo O Ciclo While Atribuir valor inicial à variável de controlo Testar critério de saída do ciclo verificando o valor da variável de controlo Incrementar a variável de controlo Output do programa: O while pode também ser aplicado a 1 ciclo infinito: while (true){ // Instruções de código } 35/52
2.5 Controlo de fluxo Instruções de ciclo Os statementes While versus Do.. While O statement while avalia a expressão no inicio do ciclo. while (expressão) { statement(s) ; } O statement do while avalia a expressão no final do ciclo. do { statement(s) } while (expressão); Dão o mesmo resultado: 36/52
2.5 Controlo de fluxo For Instruções de ciclo O ciclo for (Caso particular do ciclo while) -Recebe 3 parâmetros que trabalham com a variável de controlo. (Controlam a execução do ciclo) -Expressão que atribui valor inicial à variável de controlo -Expressão lógica que determina o fim do ciclo -Expressão que provoca o incremento da variável de controlo Exemplo: Incrementar a variável de controlo For (int k=1; k<=5; k++){ System.out.println(k + ; ) ; } Atribuir valor inicial à variável de controlo Tester critério de saída do ciclo verificando o valor da variável de controlo Nota: O primeiro passo (atribuição de valor á variável de controlo) é sempre executado mesmo que a condição que determina o fim do ciclo seja falsa 37/52
2.5 Controlo de fluxo Salto Continue Instruções de Salto A Instrução continue sem label -Força o fluxo de execução a saltar para o fim do bloco corrente Exemplo: Salta para aqui e continua no ciclo for (fim do bloco) 38/52
2.5 Controlo de fluxo Salto Break Instruções de Salto A Instrução break sem label Exemplo: -Força o programa a sair de um ciclo continuando na primeira instrução imediatamente a seguir ao bloco que constitui o ciclo Salta para aqui e sai do ciclo 39/52
2.5 Controlo de fluxo Salto Continue e Break com Label Instruções de Salto A Instrução break com label Exemplo: -Força o programa a sair do ciclo que está depois da label. Usa-se quando existem vários ciclos encadeados (interior e exterior) e se pretende saír não só do ciclo interior como do exterior. search: for (i = 0; i < arrayofints.length; i++) { for (j = 0; j < arrayofints[i].length; j++) { if (arrayofints[i][j] == searchfor) { foundit = true; break search; } } } label Break dos ciclos dentro da label search: Sem label iria para o ciclo for exterior Continua aqui após o for exterior Mesmo raciocínio para a instrução continue com label. Evita a iteração corrente de um loop exterior marcado pela label. Ver exemplo: http://java.sun.com/docs/books/tutorial/java/nutsandbolts/branch.html 40/52
2.5 Controlo de fluxo Salto Return Instruções de Salto A Instrução return -Para forçar o programa a sair da execução da função actual, regressando á função chamadora. Exemplo: Salta para aqui. A função chamadora é o método teste() 41/52
Índice 2.1 -- Variáveis Tipos Escopo Inicializaçção Casting Literais 2.2 -- Operadores Aritm Aritmééticos ticos Relacionais Bit a Bit De atribuiçção 2.3 -- Expressões, statements e blocos 2.4 -- Funções matemáticas ticas A A classe math 2.6 Strings 2.5 -- Controlo de Fluxo If If Else Switch Switch Case While For 2.6 - Strings 2.7 -- Arrays Arrays unidimensionais Arrays bi- -dimensionais 42/52
2.6 Strings String Em Java, uma cadeia de caracteres não é um tipo pré-definido, mas sim uma classe. -A String pode estar nos estados declarada, nula, vazia, com conteúdo. - O Java permite criar objectos da classe String indicando directamente o seu conteúdo entre aspas - Isto representa uma excepção relativamente a todas as outras classes. - A criação de Arrays de strings é semelhante à criação de valores primitivos Exemplo: Declarada: Valor indeterminado Nula String Vazia String com conteúdo 43/52
2.6 Strings String Métodos da classe string. 44/52
2.6 Strings String Comparação de strings. -Objectos tipo String são imutáveis. Não podem ser alterados. Cada vez que uma String é alterada, é criada uma nova String e atribuída ao apontador s -Duas Strings detectadas com o mesmo conteúdo são partilhadas pelos respectivos apontadores (ver figura) Substring de s2 da pos. 0 exclusivé à pos. 3 inclusivé True: São apontadores iguais False: São apontadores diferentes s1 P e d r o \ True: Compara conteúdos s2 s3 P e d r o \ Atenção: O Operador == usado para comparar strings pode conduzir a resultados inesperados 45/52
Índice 2.1 -- Variáveis Tipos Escopo Inicializaçção Casting Literais 2.2 -- Operadores Aritm Aritmééticos ticos Relacionais Bit a Bit De atribuiçção 2.3 -- Expressões, statements e blocos 2.4 -- Funções matemáticas ticas A A classe math 2.7 Arrays 2.5 -- Controlo de Fluxo If If Else Switch Switch Case While For 2.6 -- Strings 2.7 - Arrays Arrays unidimensionais Arrays bi-dimensionais 46/52
2.7 Arrays Array Estrutura de dados que permite armazenar um conjunto de variáveis do mesmo tipo -As variáveis são tratadas como um bloco e possuem um nome comum -Cada variável é identificada por um índice Exemplo: Criar um array de uma dimensão, com 10 números inteiros. -Os índices de cada elemento vão de 0 a 9 -No Java os elementos do array são automáticamente inicializados a 0. (Ao contrário do C) 1 Array de 10 elementos 47/52
2.7 Arrays Array Atribuição de valores ao Array Método1: Array de comprimento prédefinido (Opcional) Método2: determinação automática do comprimento pelo compilador Arrays de caracteres: A atribuição dos valores tem que estar entre pelicas 48/52
2.7 Arrays Array Array com duas dimensões (matriz) 1 Array de 6 linhas e 2 colunas Atribuição individual 100 200 300 400 500 600 Atribuição por linhas e colunas Tamanho automático 49/52
2.7 Arrays Percorrer Arrays O Ciclo for é muito útil para percorrer Arrays -Permite inicializar o índice, definir a condição de paragem e incrementar o índice numa só linha -Para percorrer o Array necessitamos da sua dimensão (nº de índices) -Para Arrays bidimencionais necessitamos de um índice para indicar a linha e outro a coluna Exemplo; Percorrer array unidimensional O Array chama-se numero Percorrer Array bi-dimensional Nº de colunas (comprimento da linha 0) 50/52
2.7 Arrays Array de Strings A linguagem Java permite criar um objecto da classe String indicando directamente o seu conteúdo entre aspas -Isto representa uma excepção relativamente a todas as outras classes -A criação de Arrays de strings é semelhante à criação de valores primitivos Exemplo: Array bi-dimensional: Atribuição Output 51/52
FIM 52/52