Apresentação do PowerPoint · •Considere a classe ao lado. Se quisermos criar um vetor, onde...

Post on 12-Feb-2019

217 views 0 download

Transcript of Apresentação do PowerPoint · •Considere a classe ao lado. Se quisermos criar um vetor, onde...

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