Apresentação do PowerPoint · arrays são estruturas de dados que permitem que uma mesma...
Transcript of Apresentação do PowerPoint · arrays são estruturas de dados que permitem que uma mesma...
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