Programação I Aula 10 (Arrays) Prof. Gilberto Irajá Müller Última atualização 12/5/2009 Arrays • Até o momento, utilizamos variáveis individuais, ou seja: • Variáveis que contêm um valor de tipo primitivo (int, double, boolean, char, ...) ou • Variáveis objeto que apontam para UM objeto (associação) Arrays • Mas afinal de contas, o que é um Array? Um array é uma estrutura de dados que permite armazenar e acessar um conjunto de valores primitivos ou apontar para um conjunto de objetos. Um array é um objeto que guarda referências (aponta) para um conjunto de dados primitivos ou um conjunto de outros objetos Arrays • Sendo o array um objeto, sua criação consiste em três etapas: • A declaração da variável • A criação do objeto • A atribuição deste objeto à variável (referência). Nesta etapa definimos o tamanho ou o número de elementos que irá conter essa estrutura de dados Ex.: // Declara, cria e atribui um array que permitirá armazenar até 4 elementos do tipo int int v[] = new int[4]; ou int[] v = new int[4]; Vocês já utilizavam o array através do seguinte método: public static void main(String[] args) ... Arrays • Sintaxe: nome do array[expressão inteira] • Declarando passo-a-passo Ex.: // Declarando a variável v do tipo array de inteiros int[] v; // Criando o objeto array de inteiros com 4 elementos/posições v = new int[4]; Uma outra analogia seria considerar a variável “v” como se fossem quatro varíaveis do tipo inteiro com o mesmo nome. O acesso a cada valor da variável se dá através de um índice. No exemplo acima, o índice seria de 0 a 3. Arrays • Os índices em Java variam de 0 até o tamanho do array – 1. Dessa forma, podemos imaginar o array “v” na memória: Arrays • Podemos fazer qualquer operação com os elementos de um array que fazemos com outras variáveis que já utilizamos. O java inicializa os objetos instanciados ou tipos primitivos! Ex.: v[2] = -5; v[0] = v[2] + 10; int i = 3; v[i] = v[i – 1] * 2; Como ficariam os valores no diagrama? Arrays • Atribuindo valores ao inicializar um array Ex.: // Declara e cria o array v com os valores dados int v[] = {2, 5, 4, -1}; // Outra maneira int x = 4; Teclado t = new Teclado(); int v[] = {x, t.leInt("Digite um inteiro: "), x + 8, (int)(Math.random()*x)}; Arrays • O atributo length Todo objeto array possui um atributo só de leitura (public final) de nome length que guarda o número de elementos do array. Qual a sua utilidade? // Trecho que exibe o conteúdo de todo o array v for (int i = 0; i < v.length; i++) System.out.println(v[i]); • Lembre-se: A instrução de repetição “for” é muito utilizada quando o tema é array! Arrays • Exercício 10.1. Para cada posição, respectivamente, grave os valores: 10, 11, 12 e 13 no array “v” • Exercício 10.2. Exiba na tela os valores do array “v” do índice mais alto para o índice mais baixo. Lembre-se: precisa decrementar a variável do for. • Exercício 10.3. Preencha cada posição do array “v” com um valor aleatório. Arrays • Não ultrapasse os limites do array Ao acessar o array, o valor do índice deve ser maior ou igual a zero e menor do que length. Ultrapassando esse limites, o Java reportará um chamado de erro IndexOutOfBoundsException e encerrará o programa. Ex.: int vetor[] = {1, 2, 3, 4, 5}; for(int i = 0; i <= vetor.length; i++) System.out.println(vetor[i]); Observem que: o operador de comparação “<=“ ocasionará o erro. O correto seria “<“ Arrays • Parâmetro do tipo array Ao ser passado um array por parâmetro, será possível acessar todos os seus elementos • Lembre-se: O tamanho do array não precisa ser passado por parâmetro porque todo array sabe seu tamanho através do atributo length Arrays • Parâmetro do tipo array Ex.: OperaArrays ref = new OperaArrays(); int v[] = {-4, 6, 7, 2, 0, -1}; System.out.println(ref.achaMaior(v)); Qual a saída? Observem que: O argumento da chamada é apenas o nome do array “v”. Arrays • Exercício 10.4. Escreva uma classe com apenas um método que recebe dois arrays de tipo double, calcula a média de cada um deles e devolve o menor valor das duas médias • Exercício 10.5. Escreva (em Java) apenas o trecho (como se tivéssemos dentro do método main) que chama o método implementado acima Arrays • Não confundir a passagem de um array (apenas a sua referência) com a passagem de elementos de um array. Ex.: public int soma(int a, int b) { return a + b; } // Estamos passando o elemento e não o array int s = soma(v[2], v[3]); Arrays • Exercício 10.6. Escreva um método que recebe um array int e um valor x, também int e devolve true se o valor x existe no array. Caso contrário, false. Arrays • Um método pode retornar um tipo array Exercício 10.7. Complete o método abaixo, que recebe dois arrays de números inteiros a e b, e devolve um terceiro array do tipo inteiro. Esse terceiro array, deverá conter os elementos do array a e do array b. public int[] montaArray(int a[], int b[]) { } Arrays • Exercício 10.8. Escreva um método que recebe um array de números inteiros e ordena seus elementos em ordem crescente Hot Topic - IMPORTANTE • A maioria das linguagens permite escolher se queremos passar um argumento por valor ou por referência em um determinado método. • Para o Java, toda a passagem de argumentos é feita por valor. • Contudo, se o argumento é do tipo primitivo, teremos um comportamento diferente do argumento de referência de um objeto. Hot Topic - IMPORTANTE • O que ocorrerá em memória? Arrays Assunto continuará.... Não percam! Métodos • Referências bibliográficas • http://inf.unisinos.br/~anibal