BC0505 Processamento da Informao Professor Carlos Alberto Kamienski
BC-0505 Processamento da Informação Professor: Carlos Alberto Kamienski - cak@ufabc. edu. br Santo André, Março de 2011
Arrays Array é um grupo de variáveis que contém valores (elementos) que são todos do mesmo tipo Tipos são divididos em 2 categorias Primitivos Referências (a objetos) Variáveis Array na verdade são referências a objetos Array na memória Os elementos de um Array podem ser tipos primitivos ou por referência Inclusive outros Arrays Referência a um Array: nome da referência + índice do elemento 2
Arrays são objetos A variável “array” é uma referência para um objeto Por isso, arrays devem ser criados antes que seus elementos possam ser referenciados Variáveis criadas a partir de classes são sempre referências para objetos 3
Arrays – Declaração Um array em Java é uma estrutura de dados que permite o armazenamento de um conjunto de variáveis (elementos) de um mesmo tipo (ou referências para instâncias de uma mesma classe) e que são acessadas individualmente por um índice char[] letras. Alfabeto = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}; letras. Alfabeto[0] a letras. Alfabeto[1] b. . . letras. Alfabeto[25] z 4
Array – Usos mais comuns Armazenar grandes quantidades de dados de um mesmo tipo ou classe 1440 amostras do tipo double da temperatura de um paciente internado, medida a cada minuto, durante um dia As 125 instâncias da classe Aluno, componentes de uma turma Utilizar variáveis individuais e com nomes distintos em casos como estes é extremamente trabalhoso e sujeito a erros O uso de arrays permite usar um único nome para denotar um conjunto homogêneo de variáveis, que são acessadas individualmente através de índices 5
Declaração e alocação de arrays unidimensionais Java adota a notação de colchetes para declarar arrays Uma variável de um tipo (classe) específico seguido de um par de colchetes declara uma referência a um array de elementos desse tipo int[] posições. De. Memória; char letras. Alfabeto[]; double[] medida. Temperatura; A declaração acima define apenas referências para arrays, mas não cria nenhuma variável do tipo array na memória É preciso criar (alocar) o array na memória com um número predeterminado de posições Opcionalmente, pode-se inicializá-lo na cláusula de declaração 6
Declaração e alocação de arrays unidimensionais Alocação de arrays Cria a variável correspondente ao array na memória com para um número de elementos predeterminado Comando realizado pela palavra-chave new, seguida pelo tipo do dado do array e do número de elementos a alocar, entre colchetes int[] posições. De. Memória = new int[16]; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 int tamanho = 32768; posições. De. Memória = new int[tamanho]; double[] medidas. Temperatura = new int[24 * 60]; 7
Declaração e alocação de arrays unidimensionais Inicialização Pode ser realizada na cláusula de declaração, para pequeno número de elementos conhecidos a priori int[] ultimo. Dia. Mes = {31, 28, 31, 30, 31}; String[] universidades = {"UFABC", "USP", "UNICAMP", "PUC"}; Pode ser realizada após a alocação/criação do array String[] universidades = new String[4]; universidades[0] = "UFABC"; universidades[1] = "USP"; universidades[2] = "UNICAMP"; universidades[3] = "PUC"; 0 1 2 3 UFABC USP UNICAMP PUC 4 8
Arrays: acesso a elementos O índice para acesso a um elemento deverá ser um valor do tipo inteiro entre 0 e o tamanho do array subtraído de 1 nome_do_array[indice] Qualquer tentativa de acesso com valor de índice fora dessa faixa resulta em erro em tempo de execução, com a interrupção da execução do programa, indicado pela exceção Array. Index. Out. Of. Bounds. Exception O tamanho – quantidade de elementos – de um array pode ser lido através do atributo length, length existente em todo array universidades. length -> 4 ultimo. Dia. Mes. length -> 12 9
Arrays de instâncias de classes Array no qual os elementos são instâncias de classes Cada elemento deverá ser criado para inicializar o array Cartao. De. Credito[] define. Cartoes(int n. Cartoes) { System. out. println("Configuracao do sistema de cartoes 'Sys. Card'. "); System. out. println("Entre com a bandeira de "+n. Cartoes+" cartoes. . . "); Cartao. De. Credito[] cartoes = new Cartao. De. Credito[n. Cartoes]; for (int n = 0; n < cartoes. length; n++) { cartoes[n] = new Cartao. De. Credito(); System. out. print("Entre com a bandeira do cartão '"+n+"': "); String bandeira = Keyboard. read. String("Sem. Limite. Card-"+n); cartoes[n]. define. Bandeira(bandeira); System. out. println(); } return cartoes; } 10
Cópia de arrays Cópia de Arrays – cópia de referência int[] primos = { 2, 3, 5, 7, 11, 13}; int[] cunhados = primos; cunhados[3] = 100; System. out. println(“primos[3] = “, primos[3]); Cópia de Arrays – cópia de conteúdo System. arraycopy(from, fromindex, toindex, count); 11
Arrays multidimensionais Elementos são acessados por um número arbitrário de índices Matrizes matemáticas double[][] matriz = new double[5][10]; double maior = maior. Valor(matriz); . . . public double maior. Valor(double[] m) { double maior. AtéAgora = m [0][0]; for (int lin= 0; lin < m. length; lin++) for (int col = 0; col < m [lin]. length; col++) if (m [lin][col] > maior. AtéAgora) maior. AtéAgora = m [lin][col]; return maior. AtéAgora; } 12
Exemplo: Multiplicação de matrizes Suponha duas matrizes A(x, y) e B(m, n) A. B só é possível se e somente se y = m A matriz resultante seria do tipo x, n B. A só é possível se e somente se n = x A matriz resultante seria do tipo m, y 13
Multiplicação Matrizes em Java double[][] matrix. A = {{3. 0, 2. 0, -1. 0}, {0. 0, 4. 0, 6. 0}}; double[][] matrix. B = {{1. 0, 0. 0}, {5. 0, 3. 0}, {6. 0, 4. 0}}; double[][] matrix. C = new double[2][2]; for(int i=0; i<2; i++){ for(int j=0; j<2; j++){ for(int k=0; k<3; k++){ matrix. C[i][j] += matrix. A[i][k]*matrix. B[k][j]; } } } 14
Comandos de repetição while Condição no início do laço do while Condição no final do laço for (inicialização; condição; incremento) Laço com contador for (tipo elemento: array) Manipula diretamente os elementos, sem os índices 15
Repetição: for tradicional public void soma. Vetor(){ int[] vetor = {87, 68, 94, 100, 68, 39, 10}; int total = 0; for (int i=0; i < vetor. length; i++){ total = total + vetor[i]; } System. out. println("Total = " + total); } 16
Repetição: for alterado public void soma. Vetor(){ int[] vetor = {87, 68, 94, 100, 68, 39, 10}; int total = 0; for (int valor: vetor){ total = total + valor; } System. out. println("Total = " + total); } 17
BC-0505 Processamento da Informação Professor: Carlos Alberto Kamienski - cak@ufabc. edu. br Santo André, Março de 2011
- Slides: 18