Vetores• De modo geral, em linguagem de programação, vetores ou arrays são estruturas de dados que permitem que uma mesma variável possa armazenar mais de um valor;
• Em Java, vetores são coleções de dados, todos do mesmo tipo;
• Cada item de dado do vetor é um elemento ou variável indexada;
• Cada item de dado é armazenado em uma determinada posição dentro do vetor, identificada por um índice;
• Um índice é um número inteiro (positivo ou negativo), colocado dentro de colchetes [], que especifica um elemento do vetor;
• Em Java, qualquer elemento de um vetor começa no índice zero. Nomes de vetores seguem as mesmas normas e convenções de nomes de variáveis.
IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli
1
Declaração e criação de vetores• Segue a mesma norma de declaração de variáveis, mas colocando-se um par de colchetes após o nome do vetor ou após o tipo de dado que o vetor armazena:
double[] salarios; ou double salarios[]; //armazena null
• Declarar um vetor não é o mesmo que criá-lo. Somente reserva um espaço de memória para a variável que referencia o vetor. Para criá-lo, devemos fazer:
salarios = new double[20]; //cria um vetor de 20 elementos, todos com 0.0
• Declaração e criação podem ser feitas em uma só linha:
double[] salarios = new double[20];
• Em Java, é obrigatório definir-se o número de elementos no momento da criação do vetor.
IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli
2
Manipulando elementos de um vetor
• Tomando o vetor salarios da página anterior, podemos manipulá-lo de variadas formas. Veja:
Associando determinado valor literal:
salarios[7] = 20000.00;
Mostrando o conteúdo de determinada posição do vetor:
System.out.println(salarios[4]);
Usando uma variável como índice:
salarios[i] = 10000.00;
Usando uma constante como índice:
salarios[NUM_MAX_EMPREGADOS] = 5000.00;
Usando uma expressão como índice:
salarios[2 * i + j / 4] = 2000.00;IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli
3
Inicialização automática de valores• int[] idades = new int[10]; associa idades a um endereço de memória e inicializa cada um dos 10 elementos do vetor com o valor-padrão zero;
• Se o vetor for do tipo char, cada posição do vetor é automaticamente inicializada com \u0000, que é o código Unicode para o caracter nulo;
• Se o vetor for de valores float ou double, os elementos recebem o valor 0.0;
• Se for um vetor booleano, os elementos são inicializados com false;
• Se os elementos do vetor forem objetos, quaisquer que sejam eles, todas as posições são definidas para null.
IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli
4
Inicializando vetores
• Podemos inicializar vetores ao mesmo tempo em que eles
são declarados e criados. Para tanto, fornecemos uma lista
de valores separados por vírgula e colocados entre chaves,
assim:
int[] idades = {15, 18, 46, 27, 19, 65};
• Esta ação é conhecida pela expressão "popular um vetor";
• Outra variante da declaração acima seria:
int[] idades = new int[] {15, 18, 46, 27, 19, 65};
• Podemos utilizar variáveis ao invés de valores literais:
int idades = {valor1, valor2, valor3, valor4};
IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli
5
Percorrendo um vetor
• Na maior parte do tempo, nossa aplicação precisa
realizar as mesmas tarefas sobre cada um dos
elementos de um vetor. Nesta situação, podemos
utilizar laços de repetição para facilitar o trabalho:
for(i = 0; i < 10; i++)
//operações com cada vetor[i];
• Quando não sabemos o tamanho de um vetor, podemos
usar a variável de instância length, que contém o
número de elementos de um vetor:
for(i = 0; i < vetor.length; i++)
//operações com cada vetor[i];
IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli
6
O laço foreach
• Em Java, há uma estrutura de repetição simplificada,
criada especialmente para ler os valores dos
elementos de um vetor. É conhecido como laço
foreach. Exemplo:
for(int valor : idades)
Sytem.out.println(valor); //escreve cada elemento do vetor
• Neste exemplo, valor é uma variável inteira, que irá
receber, a cada iteração, um elemento do vetor
idades. Valor pode ser substituído por qualquer nome
válido de variável.
IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli
7
Vetores de objetos• Considere a classe ao lado. Se
quisermos criar um vetor, onde cada elemento é um objeto da classe empregado, devemos fazer:
Empregado[] empregados = new Empregado[5];
for(i=0; i<5; i++)empregados[i] = new Empregado(umaMat, umSal);
• Para acessar os métodos de cada empregado, teríamos:
for(i=0; i<5; i++)System.out.println(empregados[i].lerMatricula + empregados[i].lerSalario);
IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli
8
Foreach com objetos
• Podemos usar o laço simplificado para percorrer mais
facilmente um vetor de objetos. Usando o exemplo da
página anterior, teríamos:
for(Empregado trabalhador : empregados)System.out.print(trabalhador.lerMatricula() + trabalhador.lerSalario());
• trabalhador é uma variável local que armazena um
objeto do tipo Empregado a cada repetição;
• Esta construção elimina a necessidade de se definir
um tamanho para o vetor e um índice para referenciar
seus elementos.
IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli
9
Manipulando vetores de strings
• Vetores de strings podem ser criados e manipulados
como qualquer outro objeto. Exemplo:
String[] pessoas = {"Maria", "João", "Joana"};
for(int i = 0; i < pessoas.length; i++)
System.out.println(pessoas[i]);
IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli
10
Vetores de caracteres
• Vetores compostos por elementos do tipo char podem
ser impressos com uma única declaração, sem o uso
de um laço de repetição: Exemplo:
char[] nome = {'M', 'A', 'R', 'I', 'A'};
System.out.print(nome);
IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli
11
Copiando vetores
• Existem situações onde precisamos duplicar os
elementos de um vetor, gerando outro vetor idêntico.
Podemos usar um laço de repetição para isso:
int[] origem = {2, 3, 7, 8};
int[] destino = new int[origem.length];
for(int i = 0; i < origem.length; i++)
destino[i] = origem[i];
IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli
12
Passando vetores para métodos
• Vetores podem ser passados como argumentos na chamadas de métodos ou usados como parâmetros na definição de métodos da mesma forma como os tipos de dados primitivos. Considere o seguinte vetor:
double[] numeros = {5.6, 4.2, 9.7};
• Passando o vetor como parâmetro de um método:
public estatic void processarVetor(double[] numeros)
{ //operações com o vetor numeros}
• Invocando um método e usando o vetor como argumento:
objeto.processarVetor(numeros);
IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli
13
Retornando um vetor de um método
• Métodos podem retornar um vetor. Basta colocar
colchetes no tipo de retorno no cabeçalho do método.
Dentro do corpo do método, a declaração return não
usa colchetes após o nome do vetor. Exemplo:
public static double[] criaVetor(){double novoVetor = {1.0, 2.0, 3.0};return novoVetor;}
• A chamada deste método poderia ser:
double[] meuVetor = criaVetor();
IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli
14
A classe Arrays• A classe java.util.Arrays disponibiliza vários métodos estáticos que:
a. Ordenam os elementos de um vetor: Arrays.sort(vetor);
b. Pesquisam por um elemento no vetor (exige que o vetor já
esteja ordenado). Retorna o índice do elemento, se este foi
encontrado, ou, caso contrário, um número negativo : Arrays.binarySearch(vetor, elemento).;
c. Conferem se dois vetores são iguais (true ou false): Arrays.equals(vetor1, vetor2);
d. Preenchem um vetor com determinado elemento: Arrays.fill(vetor, elemento);
e. Retornam uma string que representa os elementos de um vetor: Arrays.toString(vetor);
f. Copiam os elementos de um vetor para outro vetor. Retornam o
vetor copiado:Arrays.copyOf(vetor, comprimento);
IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli
15
Top Related