Arrays Outline 7.1 7.2 7.3 7.4 7.5 7.6 7.7 Introdução Arrays Declarando e Criando Arrays Exemplos usando arrays Ordenando arrays Procurando em arrays: busca linear e busca binária arrays multidimensionais 7.1 Introdução • Arrays – estruturas de dados – dados relacionados de um mesmo tipo – uma vez criados, mantém o mesmo tamanho 7.2 • Arrays – Grupo de variáveis • Tendo o mesmo tipo • Tendo o mesmo nome Arrays Nome do array (observe que todos os elementos do array têm o mesmo nome, c) índice do elemento no array c Fig. 7.1 c[ 0 ] -45 c[ 1 ] 6 c[ 2 ] 0 c[ 3 ] 72 c[ 4 ] 1543 c[ 5 ] -89 c[ 6 ] 0 c[ 7 ] 62 c[ 8 ] -3 c[ 9 ] 1 c[ 10 ] 6453 c[ 11 ] 78 Um array de 12 elementos. 7.2 Arrays (cont.) • Índice – número da posição entre colchetes – Deve ser um número positivo ou uma expressão inteira a = 5; b = 6; c[ a + b ] += 2; • Soma 2 a c[ 11 ] 7.2 Arrays (cont.) • Examine o array c – c é o nome do array – c.length devolve o tamanho do vetor c – c tem 12 elementos ( c[0], c[1], … c[11] ) • O valor de c[0] é –45 7.3 Declarando e Criando Arrays • Declarando e Criando arrays – Arrays são objetos que ocupam memória – Criados dinamicamente com a palavra reservada new int c[] = new int[ 12 ]; – Equivalente a: int c[]; // declara uma variável array c = new int[ 12 ]; // cria o array • Podemos criar também arrays de objetos String b[] = new String[ 100 ]; 7.4 • • • • Exemplos Usando Arrays Declarando arrays Criando arrays Inicializando arrays Manipulando os elementos de um array 7.4 Exemplos Usando Arrays (Cont.) • Criando e inicializando um array – Declare o array – Crie o array – Initialize os elementos do array Outline InitArray.java Linha 6 Declara array como um array de ints Linha 8 Instancia um array de 10 posições. Cada int é inicializado com 0 por default Linha 13 array.length retorna o tamanho do array Linha 14 array[conta] retorna o inteiro indexado por conta Outline InitArray.java Cada posição do array é inicializada com 0 por default 7.4 Exemplos Usando Arrays (Cont.) • Inicializando um array – usando uma lista de inicializadores • Items entre chaves ({}) • Items em listas separadas por vírgulas int n[] = { 10, 20, 30, 40, 50 }; – Cria um array de 5 elementos – valor dos índices: 0, 1, 2, 3, 4 – Não é necessário usar a palavra reservada new Outline InitArray.java Linha 5 Declara vetor como um array de ints Linha 5 O compilador usa a lista de inicialização para alocar o array Outline InitArray.java Cada elemento do vetor corresponde a um elemento na lista de inicializações 7.4 Exemplos Usando Arrays (Cont.) • Calculando o valor a ser armazenado em cada elemento do array – Inicializa os elementos de um array de inteiros com 10 inteiros positivos e pares Outline InitArray.java Linha 7 Declare vetor como um array de ints Linha 7 Crie 10 ints para vetor Linha 10 Use o índice de vetor para atribuir valores aos elementos do array Outline InitArray.java 7.4 Exemplos Usando Arrays (Cont.) • Somando os elementos de um array – Os elementos de um array podem representar uma série de valores • Podemos somar estes valores Outline Linha 5 Declara array com uma lista de inicializadores Linhas 8-9 Soma todos os valores do array 7.4 Exemplos Usando Arrays (Cont.) • Usando histogramas para mostrar graficamente o conteúdo de um array – Histograma • Imprima cada valor numérico como uma barra de asteriscos (*) Outline Linha 5 Declara array com uma lista de inicialização Linhas 12 e 13 Para cada elemento de array imprime o número correspondente de asteriscos Outline Histograma.java 7.4 Exemplos Usando Arrays (Cont.) • Usando os elementos de um array como contadores – Use os elementos do vetor como uma série de contadores para fazer alguma estatística dos dados Outline RollDie.java Linha 5 Declara frequencia como um array de 7 ints Linhas 7-8 Gera aleatoriamente 6000 inteiros no intervalo 1-6 Linha 8 Incrementa os elementos de frequencia nas posições associadas com o número aleatório gerado 7.4 Exemplos Usando Arrays (Cont.) • Usando arrays para analisar os resultados de pesquisas – 40 estudantes dão notas para a qualidade de alimentos • Escala de 1-10: 1 significa horrível, 10 significa excelente – Coloque as 40 respostas em um array de inteiros – Apresente os resultados consolidados Outline Linhas 5-13 Declare respostas como um array para armazenar 40 respostas Linha 15 Declare frequencia como um array de 10 inteiros Linhas 18-20 Para cada resposta, incremente os valores do array frequencia na posição associada com a resposta Outline 7.4 Exemplos Usando Arrays (Cont.) • Alguns pontos adicionais – Ao percorrer um array em um laço • O índice não deve nunca se tornar negativo • O índice deve ser menor do que o número total de elementos – Quando ocorre uma referência inválida a um elemento de um array: • Java gera uma exceção: ArrayIndexOutOfBoundsException – Veremos o tratamento de exceções mais tarde 7.5 Referências e Passagem de Parâmetros por Referência • Duas formas de passar argumentos para os métodos – Passagem por valor • Uma cópia do valor do argumento é passada para o método invocado • em Java, todo tipo primitivo é passado por valor – Passagem por referência • O método que invoca, dá ao método invocado acesso direto ao seus dados • O método invocado pode manipular esses dados • Desempenho melhor do que a passagem por valor • em Java, todo objeto é passado por referência – em Java, arrays são objetos • Portanto, arrays são passados para os métodos por referência 7.6 Passando Arrays para Métodos • Para passar um array como argumento para um método – Escreva o nome do array sem os colchetes • O Array temperaturas é declarado como int temperaturas = new int[ 24 ]; • A chamada do método modificaArray(temperaturas ); • Passa o array temperaturas para o método modificaArray Declara um array de 5 inteiros com uma lista de inicialização Outline Passa o array por referência para o método modificaArray Passa array[3] por valor para o método modifyElement O método modificaArray manipula diretamente o array Outline O método modificaElemento manipula uma cópia do tipo primitivo O tipo primitivo original não é modificado O objeto, passado por referência, é modificado Outline O tipo primitivo, passado por valor, não é modificado 7.7 Ordenando Arrays • Ordenando dados – Atraiu intensas pesquisas na área da ciência da computação – método da Bolha • Valores menores "borbulham" em direção ao início do array • Valores maiores "afundam" em direção ao final do array • Usa laços aninhados para efetuar múltiplas passagens pelo array – Cada passo compara pares de elementos contíguos do array • Os pares são mantidos inalterados se eles já estão em ordem crescente (ou se são iguais) • Os elementos do par trocam de posição se eles estão em ordem decrescente Outline Linha 3 Declare um array de 10 posições com uma lista de inicializações Linhas 9-20 O método da bolha (bubbleSort) para ordenar o array Outline 7.8 Busca em Arrays: Busca Linear e Busca Binária • Busca – Procurando elementos em arrays de grandes dimensões • Determine se o array contém valores que casam com a chave de busca – busca linear – busca binária 7.8 Busca em Arrays: Busca Linear e Busca Binária (Cont.) • Busca Linear – Compare cada elemento do array com a chave de busca • Se a chave de busca for encontrada retorne o índice da posição onde ela foi encontrada • Se a chave de busca não for encontrada, retorne -1 (índice inválido) – Funciona melhor para arrays pequenos ou não ordenados – Ineficiente para arrays com muitos elementos Outline Linha 3 Declara e instancia um array de 100 ints Linhas 5-6 preenche array com inteiros pares Linha 10 Percorre array usando um laço Lines 11-14 Se o elemento na posição i é igual à chave de busca, interrompe a busca Outline 7.8 Busca em Arrays: Busca Linear e Busca Binária (Cont.) • busca binária – Eficiente para arrays grandes e ordenados – Elimina metade dos elementos a cada comparação • Compara o elemento do meio do array com a chave de busca – Se o elemento é igual a chave de busca • Retorna o índice da posição corrente – Se o elemento é menor do que a chave • Repete a busca na metade de cima do array – Se o elemento é maior do que a chave • Repete a busca metade de baixo do array – Continue a busca até que: • o elemento do meio é igual a chave de busca (sucesso) • O conjunto de números não pesquisados contém apenas um elemento e este não é igual à chave (falha) Declara e instancia um array de 15 posições Outline Preenche array com números pares Outline Se a chave de busca é igual ao elemento do meio do array, interrompe a busca Se a chave de busca é menor do que o elemento do meio do array, repete a busca na metade de baixo do array Se a chave de busca é maior do que o elemento do meio do array, repete a busca na metade de cima do array Constrói a String de saída usada para imprimir o intervalo sendo pesquisado Outline 7.9 Arrays Multidimensionais • Arrays Multidimensionais – Tabelas com linhas e colunas • Arrays bidimensionais • Declaração de um array bidimensional b[2][2] int b[][] = { { 1, 2 }, { 3, 4 } }; – 1 e 2 inicializam b[0][0] e b[0][1] – 3 e 4 inicializam b[1][0] e b[1][1] int b[][] = { { 1, 2 }, { 3, 4, 5 } }; – linha 0 contém os elementos 1 e 2 – linha 1 contém os elementos 3, 4 e 5 7.9 Arrays Multidimensionais (Cont.) • Criando arrays multidimensionais – Podem ser alocados dinamicamente • array 3-por-4 int b[][]; b = new int[ 3 ][ 4 ]; • As linhas podem ter diferentes números de colunas int b[][]; b = new int[ 2 ][ ]; // aloca linhas b[ 0 ] = new int[ 5 ]; // aloca a linha 0 b[ 1 ] = new int[ 3 ]; // aloca a linha 1 Coluna 0 Coluna 1 Coluna 2 Coluna 3 Linha 0 a[ 0 ][ 0 ] a[ 0 ][ 1 ] a[ 0 ][ 2 ] a[ 0 ][ 3 ] Linha 1 a[ 1 ][ 0 ] a[ 1 ][ 1 ] a[ 1 ][ 2 ] a[ 1 ][ 3 ] Linha 2 a[ 2 ][ 0 ] a[ 2 ][ 1 ] a[ 2 ][ 2 ] a[ 2 ][ 3 ] índice da Coluna índice da Linha nome do array Fig. 7.13 Array bidimensional com 3 linhas e 4 colunas. Declara array1 um array 2 x 3 Outline Declara array2 um array de 3 linhas e número variável de colunas array[linha].length retorna o número de colunas associadas com o índice linha Use a notação de dois colchetes para acessar os valores no array bidimensional Outline Outro exemplo • DoubleArray.java Declara notascomo um array 3-por-4 Cada linha representa um estudante; cada coluna representa a nota de uma prova Outline ArrayDoubles Determina o mínimo e o máximo para todos os estudantes Determina a média para cada estudante Usa laços aninhados para procurar a menor nota Outline ArrayDoubles Usa laços aninhados para procurar a maior nota O método media recebe as notas de um aluno como parâmetro Calcula a soma dos elementos do array Divide pelo número de elementos para obter a média Outline