Chapter 7

Propaganda
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
Download