Arrays em Java Alberto Costa Neto DComp - UFS 1 Roteiro Arrays Arrays de Objetos Arrays Multidimensionais 2 Arrays Como armazenar as médias dos 3 alunos que se candidataram para fazer parte do grupo de pesquisa? float media1 = 7.5f; float media2 = 8.9f; float media3 = 8.3f; Não existiria uma estrutura de dados que armazenasse todos os dados, tendo apenas um nome como referência??? 3 Arrays medias Algo assim... 0 7.5f 1 8.9f 2 8.3f medias [0] = 7.5f; medias [1] = 8.9f; medias [2] = 8.3f; 4 Arrays O que é um array? Array medias 0 7.5f 1 8.9f 2 8.3f Arrays são objetos (Java) medias [0] = 7.5f; Sintaxe especial medias [1] = 8.9f; medias [2] = 8.3f; 5 Arrays Características de um array Array medias 0 7.5f 1 8.9f 2 8.3f Elementos: - Identificados pelo mesmo nome - Diferenciados apenas pelo índice medias [0] = 7.5f; Armazenam valores do mesmo tipo medias [1] = 8.9f; medias [2] = 8.3f; 6 Arrays Como declarar um array? float [ ] medias; float medias [ ]; int [ ] matriculas; int matriculas [ ]; String [ ] nomes; String nomes [ ]; 7 Arrays Como criar um array? Usando “new” String [ ] nomes; nomes = new String [3]; float [ ] medias = new float [3]; Usando inicializadores String[ ] nomes = { “Maria”, “Pedro”, “João” }; float [ ] medias = {7.5f , 8.9f , 8.3f } ; 8 Arrays Atribuindo valores String[ ] nomes = new String [3]; nomes[0] = “Maria”; nomes[1] = “Pedro”; nomes[2] = “João” ; float [ ] medias = new float [3]; medias [0] = 7.5f; medias [1] = 8.9f; medias [2] = 8.3f; 9 Arrays Outro exemplo String[] nomes = new String [3]; Scanner e = new Scanner(System.in); for (i = 0 ; i < 3; i++) nomes[i] = e.next(); 10 Arrays Acessando os valores armazenados String[] nomes = new String [3]; for (i=0 ; i < nomes.lenght ; i++) System.out.println( nomes[i] ); 11 Dever de Sala 1) Escreva um programa em Java que leia dez número inteiros e em seguida calcule e mostre: a) Todos os números pares b) Todos os números ímpares c) A quantidade de números pares e ímpares 12 Dever de Sala 2) Escreva um programa em Java que armazena o nome de 5 alunos e de suas respectivas médias. O programa deve exibir: a) Nome do aluno com maior média (desconsiderar empates) b) Nome dos alunos reprovados (média < 5) Obs.: Usar 2 arrays (um p/ nomes e outro p/ médias) 13 Arrays de Objetos O que faz este código? Conta[] minhasContas; minhasContas = new Conta[10]; Quantas contas foram criadas? 14 Arrays de Objetos Foi criado um array para guardar referências para contas Conta[] minhasContas; minhasContas = new Conta[10]; Array 0 1 minhasContas 2 ... 15 Arrays de Objetos Populando o array Conta[] minhasContas; minhasContas = new Conta[10]; Conta novaConta = new Conta(); novaConta.creditar(1000f); minhasContas[0] = novaConta; Array Objeto novaConta 0 1 minhasContas 2 ... 16 Arrays de Objetos Outra forma minhasContas[1] = new Conta(); minhasContas[1].creditar(500f); Array Objeto novaConta 0 1 minhasContas 2 ... Outro objeto Conta 17 Arrays de Objetos Expandindo... Conta numero: int saldo: double Conta (numero: int) getNumero(): int getSaldo(): double creditar(valor: double) debitar(valor: double) Banco 1 * nome: String sigla: String ultimo: int cadastrarConta (conta) localizarConta(num) 18 Arrays de Objetos class Banco { ... private Conta[] contas; private int ultimo = 0; public Banco( ) { contas = new Conta[100]; } public void cadastrar(Conta c) { contas[ultimo] = c; ultimo = ultimo + 1; } 19 Arrays de Objetos private Conta localizarConta (int n) { for (int i = 0; i < ultimo; i++) if (contas[i].getNumero() == n) return conta[i]; } return null; } ... 20 Arrays de Objetos Cadastro flexível public void cadastrar(Conta c) { if (ultimo==contas.length) { Conta[] aux = new Conta[ultimo+10]; for (int i = 0; i < contas.length ; i++) aux[i]= contas[i]; contas = aux; } } contas[ultimo] = c; ultimo = ultimo + 1; // muda a referência 21 Dever de Sala 3) Escreva um programa em Java que armazena o nome de 5 alunos e de suas respectivas médias. O programa deve exibir: a) Nome do aluno com maior média (desconsiderar empates) b) Nome dos alunos reprovados (média < 5) Obs.: Usar 1 array contendo as referências para objetos Aluno 22 Arrays Multidimensionais O que faz este código? byte[ ][ ] a = new byte[2][4]; a[0] a a[1] 0 a[0][0] . 0 . . 0 0 a[0][3] 0 a[1][0] . 0 . . 0 0 a[1][3] O tipo da variável ‘a’ é byte[ ][ ] O tipo de a[0] e a[1] é byte[] O tipo dos a[i][j] é byte 23 Arrays Multidimensionais São implementados como arrays de arrays. Para cada dimensão basta especificar um par de colchetes na declaração da variável 24 Arrays Multidimensionais O que faz este código? int[ ][ ] e = {{1, 2}, {3, 4, 5}, {5, 6, 7, 8}}; e [0] e [1] e e [2] 1 e [0] [0] 2 e [0] [1] 3 e [1] [0] 4 e [1] [1] 5 e [1] [2] 5 e [2] [0] 6 e [2] [1] 7 e [2] [2] 8 e [2] [3] 25 Arrays Multidimensionais Qual a diferença? byte [ ][ ] e = new byte[ 2 ][ 4 ]; byte [ ][ ] e = new byte[ 2 ][ ]; e [ 0 ] = new byte [ 3 ]; e [ 1 ] = new byte [ 5 ]; 26 Arrays Multidimensionais O que faz este código? short[ ][ ] triangle = new short[5][ ]; for(int i = 0; i < triangle.length; i++) { triangle[i] = new short[i+1]; for(int j=0; j < i+1; j++) triangle[i][j] = (short) i + j; } 27 Arrays Multidimensionais Resultado triangle[i] 0 triangle triangle[i] [j] 1 2 2 3 4 3 4 5 6 4 5 6 7 8 28 Referências Slides “Vetores” Prof. Marcos Dósea. UFS. 2010. Slides “Arrays em Java”, Profa. Débora. UFS. 2010 Slides “Arrays Java” Prof Giovanny . Java.UFS. 2009. Caelum. Java e Orientação a Objetos http://www.caelum.com.br/apostilas/ Capítulo 5 Java How to Program Capítulo – 7 29