View
241
Download
0
Embed Size (px)
Citation preview
ArraysOutline7.1 Introdução7.2 Arrays7.3 Declarando e Criando Arrays7.4 Exemplos usando arrays7.5 Ordenando arrays7.6 Procurando em arrays: busca linear e busca binária7.7 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
• Arrays– Grupo de variáveis
• Tendo o mesmo tipo• Tendo o mesmo nome
Fig. 7.1 Um array de 12 elementos.
Nome do array (observe que todos os elementos do array têm o mesmo nome, c)
índice do elemento no array c
c[ 0 ]
c[ 1 ]c[ 2 ]
c[ 3 ]
c[ 4 ]
c[ 5 ]
c[ 6 ]
c[ 7 ]
c[ 8 ]
c[ 9 ]
c[ 10 ]
c[ 11 ]
-45
6
0
72
1543
-89
0
62
-3
1
6453
78
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 objetosString 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 6Declara array como um array de ints
Linha 8Instancia um array de 10 posições. Cada int é inicializado com 0 por default
Linha 13array.length retorna o tamanho do array
Linha 14array[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írgulasint 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 5Declara vetor como um array de ints
Linha 5O 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 10Use 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 5Declara array com uma lista de inicializadores
Linhas 8-9Soma 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 5Declara array com uma lista de inicialização
Linhas 12 e 13Para 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 5Declara frequencia como um array de 7 ints
Linhas 7-8Gera aleatoriamente 6000 inteiros no intervalo 1-6
Linha 8Incrementa 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-13Declare respostas como um array para armazenar 40 respostas
Linha 15Declare frequencia como um array de 10 inteiros
Linhas 18-20Para 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
OutlineDeclara um array de 5
inteiros com uma lista de inicialização
Passa o array por referência para o método modificaArray
Passa array[3] por valor para o método
modifyElement
OutlineO método modificaArray manipula diretamente o array
O método modificaElemento manipula
uma cópia do tipo primitivo
O tipo primitivo original não é modificado
OutlineO objeto, passado por referência, é modificado
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 3Declare um array de 10 posições com uma lista de inicializações
Linhas 9-20O 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 3Declara e instancia um array de 100 ints
Linhas 5-6preenche array com inteiros pares
Linha 10Percorre array usando um laço
Lines 11-14Se 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)
OutlineDeclara e instancia um array de
15 posições
Preenche array com números pares
OutlineSe 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
Fig. 7.13 Array bidimensional com 3 linhas e 4 colunas.
a[ 1 ][ 0 ] a[ 1 ][ 1 ] a[ 1 ][ 2 ] a[ 1 ][ 3 ]
Linha 0
Linha 1
Linha 2
Coluna 0 Coluna 1 Coluna 2 Coluna 3
índice da Linha
nome do array
índice da Coluna
a[ 0 ][ 0 ] a[ 0 ][ 1 ] a[ 0 ][ 2 ] a[ 0 ][ 3 ]
a[ 2 ][ 0 ] a[ 2 ][ 1 ] a[ 2 ][ 2 ] a[ 2 ][ 3 ]
OutlineDeclara array1 um array 2 x 3
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
Outline
ArrayDoubles
Declara notascomo um array 3-por-4
Cada linha representa um estudante; cada coluna representa a nota de
uma prova
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