Baixe o app para aproveitar ainda mais
Prévia do material em texto
VETORES Thaís Alves Burity Rocha Agenda Definição Declaração Inicialização Acesso Outra versão do laço de repetição for Vetores Multidimensionais Var-args API de Java Método main Vetores: Conceito Representa uma coleção homogênea de dados Todos os elementos são do mesmo tipo Em Java São objetos Elementos podem ser de tipo referenciado ou primitivo Possuem tamanho fixo depois de criados Atributo length Vetores: Declaração O vetor ainda não existe na memória Apenas existe a variável de referência que poderá apontar para um vetor do tipo declarado! int[] a; double[] x; double y[]; //correto, porém menos legível Cliente[] clientes; Vetores: Declaração e Criação A maneira mais convencional é utilizar o operador new Um pouco diferente da criação de outros objetos Requer a especificação de tamanho Elementos são inicializados com valor default do tipo int[] a = new int[4]; Primeiro item: a[0] Último item: a[3] Heap a 0 0 0 0 Vetores: Criação O tamanho do vetor pode ser definido por uma variável ou expressão numérica O tamanho pode ser definido de forma dinâmica O tamanho não pode ser alterado int tamanho = 32768; byte[] vetor1 = new byte[tamanho]; double[] vetor2 = new double[tamanho*2]; boolean[] respostas = new boolean[12]; respostas = new boolean[144]; Vetores: Inicialização e Acesso Uma vez que o vetor foi criado, seus elementos podem ser acessados através do índice Valor inteiro não-negativo Intervalo [0, n-1], sendo n = total de elementos double[] salarios = new double[5]; for (int i = 0; i<5; i++){ salarios[i] = i*1000; } Vetores: Acesso Inválido Se é feito acesso a um elemento indefinido de um vetor, é gerado um erro em tempo de execução ArrayIndexOutOfBoundsException String[] nomes = new String[3]; nomes[0] = “José”; nomes[1] = “João”; nomes[2] = “Maria”; System.out.println(nomes[5]); Vetores: Declaração, Criação e Inicialização Combinadas É possível declarar, criar e atribuir valor aos elementos do vetor em uma única operação int[] primosPequenos = {2, 3, 5, 7}; String[] cores = {"Vermelho", "Azul", "Amarelo"}; Heap primosPequenos 2 3 5 7 “Vermelho” “Azul” “Amarelo”cores Vetores: Acesso Usando for Melhorado Existe uma outra versão do for, que facilita a operação de percorrer os elementos de um vetor double[] numeros = {1.1,1.2,1.3,1.4,1.5}; for (int i = 0; i< numeros.length; i++){ System.out.println(numeros[i]); } double[] numeros = {1.1,1.2,1.3,1.4,1.5}; for (double n: numeros){ System.out.println(n); } n guarda o valor do elemento corrente Vetores Anônimos public class Calculadora{ public int somaVetor(int[] vetor){ int resultado = 0; for(int i=0; i<vetor.length; i++){ resultado += vetor[i]; } return resultado; } public static void main(String[] args){ Calculadora calc = new Calculadora(); int soma = calc.somaVetor(new int[]{7,7,8,2,5}); } } Não é necessário ter uma variável de referência para passar o vetor como parâmetro! Vetores de Objetos Armazenam referências para objetos de um determinado tipo Devem ser alocados da mesmo forma que vetores de tipos primitivos Por default, cada elemento no vetor é inicializado com null Vetores de Objetos Conta[] contas = new Conta[20]; contas 0 1 2 19 null null … contas[0] = new Conta(“111”,40); contas 0 1 2 19 nullnull … Vetores Multidimensionais São vetores com 2 ou mais dimensões São úteis para representar matrizes O primeiro valor entre colchetes representa a linha e o segundo, a coluna 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] Vetores Multidimensionais Declaração, criação e inicialização Acesso int[][] a = new int[3][4]; int[][] b = { {1,2}, {3,4} }; b[0][1] = 19; b[1][0] = -1; b[1][4] = 10; Vetores Multidimensionais Irregulares A quantidade de colunas não é igual em todas as linhas Java trata vetores multidimensionais como vetores de vetores Um vetor onde cada elemento é um vetor No caso de matriz, um vetor onde cada elemento é um vetor unidimensional Vetores Multidimensionais Irregulares 0 1 2 3 4 7 1 5 8 3 6 5 11 2 7 12 7 6 9 6 9 4 5 5 10 4 1 int[][] vetor = { {7,1,5,8,3,6}, {5,11,2}, {7}, {12,7,6,9}, {6,9,4,5,5,10,4,1} }; vetor Vetores Multidimensionais Irregulares Declaração Acesso int[][] a = new int[3][]; int[][] b = { {1,2,3}, {4,5} }; a[0] = new int[5]; a[0][3] = 4; a[1][1] = 5; b[1][1] = -1; Var-args: Introdução Em regra geral, parâmetros são identificados por tipo e nome, e são separados por vírgula Se há muitos, a declaração do método fica enorme Nem sempre é possível prever a quantidade int somar(int a, int b){ return a+b; } int somar(int a, int b, int c){ return a+b+c; } int somar(int a, int b, int c, int d){ return a+b+c+d; } Var-args: Conceito e Declaração Define uma lista de argumentos de tamanho variável Os argumentos são armazenados e acessados como vetor int somar(int... a){ int soma = 0; for(int item: a){ soma += item; } return soma; } Var-args: Uso public class MinhaClasse{ int somar(int... a){ int soma = 0; for(int item: a){ soma += item; } return soma; } public static void main(String[] args){ MinhaClasse obj = new MinhaClasse(); int soma = obj.somar(); //OK soma = obj.somar(1,2); soma = obj.somar(1,2,3,4,5); soma = obj.somar(new int[]{7,8,9}); } } Var-args: Exemplo da API de Java Exemplo: System.out.printf() O primeiro argumento é a string de formatação Depois, o conteúdo para ser formatado (em uma ou mais variáveis) %d = decimal %f = ponto flutuante %s = String %n = pular linha System.out.printf("%d %f %s %n",23,2.3,"23"); System.out.println("23 "+"2.3 "+"23"); API de Java Provê classes que implementam o comportamento de um vetor (com melhorias) ArrayList, Vector e LinkedList Elementos podem ser acessados pelo índice Só podem armazenar objetos Conceito de lista encadeada ArrayList x Vetor Operação ou Propriedade Vetor ArrayList Tamanho - Fixo (alocação estática de memória) - Atributo length: capacidade de armazenamento - Variável (alocação dinâmica de memória) - Método size(): quantidade de elementos armazenados Inserção - Limitada pelo tamanho - Acesso direto aos elementos por índice - Não há limite - Método add() Remoção - Atribuição de símbolo ou null - Não muda o tamanho do vetor - Método remove() - Muda o tamanho do conjunto Consulta - Loop para percorrer o vetor - Método contains() API de Java Vector Equivalente à ArrayList, mas com suporte à sincronização (programação concorrente) LinkedList Melhor performance para ações de inserção e remoção Bastante usada para simular outras estruturas de dados (fila, pilha) API de Java A lista sobre vetores deve ser resolvida com vetores No projeto pode ser utilizado ArrayList Na prova, deve ser usado o que for pedido na questão Se a questão não especifica, pode usar o que quiser No mundo real O ideal é não tentar “reiventar a roda”: Se existe uma solução bem consolidada para um problema, você não deve dedicar tempo e esforço para recriá-la Método Main O método main recebe como parâmetroum vetor de String O vetor é percorrido como qualquer outro! Mas como o main recebe parâmetro, se ele é chamado automaticamente pela JVM? public class Eco { public static void main(String[] args){ for(String s: args){ System.out.println(s); } } } Método Main Valores são passados quando o programa vai ser executado Em linha de comando Exemplo Compilar: javac Eco.java Executar: java Eco aula de poo 2013.2 java <nome do programa> <argumentos separados por espaço> Classe que contém o método main Parâmetros para o main Método Main No Eclipse Run > Run Configurations… > aba “(x)=Arguments” > seção “Program Arguments” Valores separados por espaço Representação de String em Vetor A classe String contém um método que permite obter uma representação da String em vetor char[] toCharArray() Exemplo String palavra = “cachorro”; char[] palavraVetor = palavra.toCharArray(); for(char i: palavraVetor){ System.out.print(i + “ ”); }
Compartilhar