Vetores e Matrizes
Programação de Computadores II
Vetores e Matrizes
Prof. Antônio Augusto Chaves
Departamento de Matemática
Bloco VI - sala 23
http://www.feg.unesp.br/∼chaves
[email protected]
1 / 37
Vetores e Matrizes
Comentários sobre a prova
Momento fala que eu te escuto
R. Sfair (FEG)
PC - Aula 17
16 de agosto de 2008
5 / 27
2 / 37
Vetores e Matrizes
Avisos
I
Os exercícios realizados no laboratório deverão ser
entregues a partir da próxima aula prática (06/04/2010).
3 / 37
Vetores e Matrizes
Importante
I
Só existe um jeito de aprender a programar:
Programando !!!
4 / 37
Vetores e Matrizes
Objetivos
I
Ao final desta lição, o estudante será capaz de:
I
Declarar e criar vetores
I
Acessar elementos de um vetor
I
Determinar o numero de elementos em um vetor
I
Declarar e criar vetores multi-dimensionais
5 / 37
Vetores e Matrizes
Revisão
Revisão
I
Como construir um objeto?
I
I
Encapsulamento
I
I
métodos construtores
métodos set e get
Escopo de variáveis
I
Variáveis estáticas e dinâmicas
6 / 37
Vetores e Matrizes
Vetores
Introdução
I
Suponha que tenhamos três variáveis do tipo int com
diferentes identificadores para cada variável
int numero1;
int numero2;
int numero3;
numero1 = 1;
numero2 = 2;
numero3 = 3;
7 / 37
Vetores e Matrizes
Vetores
3. Vetores e Matrizes
Introdução
•
A Java API contém diversas classes para a manipulação de estruturas
de dados. A estrutura de dados mais simples é o vetor ( array ).
•
Podemos
uma variável
para armazenar
e manipular
UmIvetor
é umutilizar
agrupamento
de valores
de um mesmo
tipo uma
primitivo
lista de dados de forma mais eficiente. Este tipo de variável é
ou um agrupamento de objetos de uma mesma classe.
•
Cada elemento de um vetor armazena um valor. Os elementos de um
I Um vetor armazena múltiplos itens de dados do mesmo tipo
vetor
são referenciados por meio de um índice. O primeiro elemento
(tipos primitivos ou objetos de uma mesma classe) em um bloco
tem sempre o índice 0 (zero). Portanto, para um vetor de n
continuo de memória, dividido-o em certa quantidade de casas
elementos, os índices variam de 0 a n-1.
chamada de vetor
v[0]
v[1]
v[2]
v[3]
v[4]
v[5]
v
•
Em Java, vetores têm tamanho fixo e, uma vez criados, não podem
ser redimensionados. O campo length contém o tamanho do vetor.
8 / 37
Vetores e Matrizes
Vetores
Declarando Vetores
I
Escreve-se o tipo de dado seguido por colchetes [ ] e por
um identificador
int [] idades;
ou
int idades[];
9 / 37
Vetores e Matrizes
Vetores
Criando Vetores
I
Criar o vetor e especificar seu tamanho com um parâmetro no
construtor
I
Escrever a palavra-chave new, definir o tipo de dado seguido
por colchetes contendo a quantidade de elementos do vetor:
// declaração
int idades[];
// construindo um objeto
idades = new int[100];
ou
// declarando e construindo um objeto
int idades[] = new int[100];
10 / 37
Vetores e Matrizes
Vetores
Criando Vetores
[0]
[1]
[2]
[3]
[4]
idades
.
.
.
[99]
length
= 100
objeto vetor
11 / 37
Vetores e Matrizes
Vetores
Criando Vetores
I
Pode-se, também, construir um vetor ao iniciá-lo diretamente
com dados
int vet[] = {1, 2, 3, 4, 5};
I
Este código declara e inicializa um vetor de inteiros com cinco
elementos (inicializados com os valores 1, 2, 3, 4, e 5)
12 / 37
Vetores e Matrizes
Vetores
Exemplos
boolean resultados[] = {true, false, true, false};
double graus[] = {100, 90, 80, 75, 30};
String dias[] = {“Seg”, “Ter”, “Qua”, “Qui”,
“Sex”, “Sab”, “Dom”};
13 / 37
Vetores e Matrizes
Vetores
Criando Vetores
I
Atenção: Um vetor pode ter exatamente o tamanho necessário,
ou seja, o tamanho do vetor pode ser lido, atribuído ou
calculado.
String nome[];
int n = 3;
nome = new String[n];
nome[0] = “Ze”;
nome[1] = “Jó”;
nome[2] = “Lu”
I
Neste código o tamanho do vetor é definido em tempo de
execução
14 / 37
Vetores e Matrizes
Vetores
Exemplo
LerTamanhoVetor.java
1
import javax.swing.JOptionPane;
2
3
public class LerTamanhoVetor
4
{
5
public static void main(String[] args)
6
{
7
int v[];
8
String sTam;
9
int tam;
10
11
sTam = JOptionPane.showInputDialog("Tamanho do vetor");
12
tam = Integer.parseInt(sTam);
13
14
// Construir o vetor do tamanho desejado
15
v = new int[tam];
16
for (int i = 0; i < tam; i++)
17
v[i] = 2*(i + 1);
18
}
19
}
15 / 37
Vetores e Matrizes
Vetores
Acessando Elementos do Vetor
I
Utilizar um número chamado de índice
I
Índice numérico
I
I
I
I
Atribuído a cada elemento do vetor
Permite o acesso individual a seus elementos
Iniciado com zero e progride sequencialmente até o fim do
vetor
Índices dentro de um vetor vão de 0 até (tamanhoVetor - 1)
16 / 37
Vetores e Matrizes
Vetores
Acessando Elementos do Vetor
int idades[] = new int[100];
idades[0] = 10;
System.out.printf(“%d”,idades[99]);
17 / 37
Vetores e Matrizes
Vetores
Acessando Elementos do Vetor
I
O valor armazenado de cada elemento do vetor será
inicializado com zero para vetores com o tipo de dado
numérico
I
Para referenciar os elementos em vetores de objetos,
como as Strings, estes NÃO serão inicializados com
brancos ou strings vazias “ ”. Em vez disso, deve-se
preencher explicitamente cada elemento deste vetor
18 / 37
Vetores e Matrizes
Vetores
Acessando Elementos do Vetor
I
O seguinte código de exemplo mostra como imprimir todos
os elementos de um vetor
ExemploVetor.java
1
public class ExemploVetor
2
{
3
public static void main(String[] args)
4
{
5
int [] idades = new int[100];
6
for( int i=0; i<100; i++ )
7
{
8
System.out.print( idades[i] );
9
}
10
}
11
}
19 / 37
Vetores e Matrizes
Vetores
Tamanho de um Vetor
ExemploVetor.java
1
public class ExemploVetor
2
{
3
public static void main(String[] args)
4
{
5
int [] idades = new int[100];
6
for( int i=0; i<idades.length; i++ )
7
{
8
System.out.print( idades[i] );
9
}
10
}
11
}
20 / 37
Vetores e Matrizes
Vetores
Exercício Resolvido
I
Implementar a classe Vetor com os métodos apresentados
no diagrama UML abaixo:
Vetor
+ lerVetor(int v[ ] )
+ somarVetor(int v[ ] )
+ mostrarVetor(int v[ ] )
21 / 37
Vetores e Matrizes
Vetores
Exercício Resolvido
Vetor.java
1
import java.util.*;
2
3
public class Vetor
4
{
5
public static void lerVetor(int v[])
6
{
7
Scanner in = new Scanner(System.in);
8
for (int i = 0; i < v.length; i++)
9
{
10
System.out.print("v[" + i + "] = ");
11
v[i] = in.nextInt();
12
}
13
}
14
15
public static int somarVetor(int v[])
16
{
17
int soma = 0;
18
for (int i = 0; i < v.length; i++)
19
{
20
soma = soma + v[i];
21
}
22
return soma;
23
}
24
public static void mostrarVetor(int v[])
25
{
22 / 37
18
for (int i = 0; i < v.length; i++)
{
soma = soma + v[i];
}
return soma;
Vetores e Matrizes
19
Vetores
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Exercício Resolvido
}
public static void mostrarVetor(int v[])
{
System.out.print("[");
for (int i = 0; i < v.length; i++)
{
System.out.print(v[i]);
if (i < v.length-1)
System.out.print(", ");
}
System.out.println("]");
}
public static void main (String [] args)
{
int n,x[];
Scanner in = new Scanner(System.in);
System.out.print("Tamanho do vetor: ");
n = in.nextInt();
x = new int[n];
lerVetor(x);
mostrarVetor(x);
int s = somarVetor(x);
System.out.println("Soma = " + s);
}
}
23 / 37
Vetores e Matrizes
Vetores
3. Vetores e Matrizes
Operações
com
Vetores
Operações com
Vetores
•I Após
SeSe
istoisto
Apósum
umvetor
vetor ter
ter sido
sidocriado
criadonão
nãoéépossível
possívelredimensioná-lo.
redimensioná-lo.
for
ee
for necessário,
necessário,deve-se
deve-secriar
criarum
umoutro
outrovetor
vetorda
dadimensão
dimensãodesejada
desejada
fazer
o
vetor
antigo
apontar
para
o
novo.
fazer o vetor antigo apontar para o novo.
•I A
arraycopy(),
que
A classe
classeSystem
Systemoferece
ofereceum
ummétodo
métodoespecial:
especial:
arraycopy(),
que permite
permite realizar cópias de vetores.
realizar cópias de vetores.
Exemplo:
// redimensionamento através de uma cópia
int v1[] = {1, 2, 3, 4, 5};
v1[5] = 10
// Erro: índice fora dos limites
int v2[] = new int[10];
System.arraycopy(v1, 0, v2, 0, v1.length);
v2[5] = 10;
// Ok, os índices de v2 vão de 0 a 9
arraycopy(v1, i1, v2, i2, n) - Copia n elementos do vetor v1 (a partir
do elemento de índice igual a i1) para posições do vetor v2 que iniciam
em i2. Após a cópia, novos elementos podem ser definidos para o novo
vetor.
© ELFS
88
24 / 37
Vetores e Matrizes
Vetores
Operações com Vetores
3.IVetores
e Matrizes
Outra forma
de copiar um vetor é produzir um “clone” do vetor
•
Outra forma de copiar um vetor é produzir um "clone" do vetor.
TestaClone1.java
public class TestaClone1 {
public static void main(String[] args) {
int a1[] = {1, 2, 3, 4};
int a2[] = (int[])a1.clone();
System.out.println((a1 == a2));
a1[1]++;
System.out.println(a1[1]);
System.out.println(a2[1]);
}
Note que os componentes de um vetor e de um clone
}
desse vetor são variáveis diferentes.
public class TestaClone2 {
public static void main(String[] args) {
int m1[][] = {{1, 2}, {3, 4}};
int m2[][] = (int[][])m1.clone();
System.out.println((m1 == m2));
System.out.println(m1[0] == m2[0]);
A saída será:
false
3
2
TestaClone2.java
25 / 37
Vetores e Matrizes
Matrizes
Vetores Multidimensionais: Matrizes
I Vetores podem ter diversas dimensões. Um vetor bidimensional é
conhecido como Matriz
I São implementados como vetores dentro de vetores
I São criados adicionando-se mais um conjunto de colchetes após o
nome do vetor declarado
// array inteiro de 512 x 128 elementos
int[][] twoD = new int[512][128];
// array de caracteres de 8 x 16 x 24
char[][][] threeD = new char[8][16][24];
// array de String de 4 linhas x 2 colunas
String[][] dogs = {{ “terry”, “brown” },
{ “Kris”, “white” },
{ “toby”, “gray”},
{ “fido”, “black”}
};
26 / 37
3. eVetores
Vetores
Matrizes
e Matrizes
Matrizes
Vetores Multidimensionais
• Vetores podem ter diversas dimensões. Um vetor bidimensional é
também conhecido como matriz.
Vetores
Multidimensionais: Matrizes
• É possível construir vetores multidimensionais não-retangulares em
Java.
I É possível construir vetores multidimensionais não-retangulares
• Como
vetor pode conter qualquer objeto, para definir vetores
emum
Java
multidimensionais basta definir um vetor de vetores.
I Exemplos:
Exemplos:
© ELFS
int v[][] = new int[2][];
v[0] = new int[2];
v[1] = new int[2];
Vetor retangular 2x2 (ou matriz
de 2 linhas e 2 colunas).
int vet[][] = new int[3][];
vet[0] = new int[2];
vet[1] = new int[4];
vet[2] = new int[3];
Um vetor bidimensional não
retangular.
int m[][] = {{1,2},{3,4}};
Corresponde à matriz:
1
2
3
4
81
27 / 37
Vetores e Matrizes
Matrizes
Vetores Multidimensionais: Matrizes
I
Acessar um elemento em um vetor multi-dimensional é idêntico
a acessar elementos de um vetor unidimensional
I
Acessando o primeiro elemento na primeira linha da matriz:
nomeMatriz[0][0];
28 / 37
Vetores e Matrizes
Matrizes
Exercício Resolvido
I
Implementar a classe Matriz com os métodos
apresentados no diagrama UML abaixo:
Matriz
+ lerMatriz(int m[ ][ ] )
+ modificarMatriz(int m[ ][ ] )
+ somarMatrizes(int a[ ][ ], int b[ ][ ] )
+ mostrarMatriz(int m[ ][ ] )
29 / 37
Vetores e Matrizes
Matrizes
Exercício Resolvido
ExemploMatriz.java
1
import java.util.*;
2
3
public class ExemploMatriz
4
{
5
public static void lerMatriz(int m[][])
6
{
7
Scanner in = new Scanner(System.in);
8
for (int i = 0; i < m.length; i++)
9
{
10
for (int j = 0; j < m[i].length; j++)
11
{
12
System.out.print("m[" + i + "," + j + "] = ");
13
m[i][j] = in.nextInt();
14
}
15
}
16
}
17
18
public static void modificarMatriz(int n, int m[][])
19
{
20
for (int i = 0; i < m.length; i++)
21
{
22
for (int j = 0; j < m[i].length; j++)
23
{
24
m[i][j] = n * m[i][j];
25
}
26
}
27
}
30 / 37
20
for (int i = 0; i < m.length; i++)
{
22
for (int j = 0; j < m[i].length; j++)
Matrizes
23
{
Exercício
24 Resolvido
m[i][j] = n * m[i][j];
25
}
26
}
27
}
28
public static int[][] somarMatrizes(int a[][], int b[][])
29
{
30
int soma[][] = a;
31
for (int i = 0; i < a.length; i++)
32
{
33
for (int j = 0; j < a[i].length; j++)
34
{
35
soma[i][j] = a[i][j] + b[i][j];
36
}
37
}
38
return soma;
39
}
40
41
public static void mostrarMatriz(int m[][])
42
{
43
for (int i = 0; i < m.length; i++)
44
{
45
for (int j = 0; j < m[i].length; j++)
46
{
47
System.out.printf("%4d",m[i][j]);
48
}
49
System.out.println();
50
}
51
}
52
public static void main (String [] args)
53
{
Vetores e21
Matrizes
31 / 37
46
{
Vetores e47
Matrizes
System.out.printf("%4d",m[i][j]);
}
System.out.println();
48
Matrizes
49
Exercício
50 Resolvido
}
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
}
public static void main (String [] args)
{
int numLins,numCols,mat1[][];
Scanner in = new Scanner(System.in);
System.out.print("Número de linhas: ");
numLins = in.nextInt();
System.out.print("Número de colunas: ");
numCols = in.nextInt();
mat1 = new int[numLins][numCols];
lerMatriz(mat1);
System.out.println("\nMatriz 1:");
mostrarMatriz(mat1);
int mat2[][] = new int[numLins][numCols];
mat2 = (int[][])mat1.clone();
modificarMatriz(2,mat2);
System.out.println("\nMatriz 2:");
mostrarMatriz(mat2);
int mat3[][] = somarMatrizes(mat1,mat2);
System.out.println("\nMatriz 3:");
mostrarMatriz(mat3);
}
}
32 / 37
Vetores e Matrizes
Exercícios
Exercícios
I
Construir um programa que simula o lançamento de dois
dados. O programa deve usar um objeto da classe
Random para lançar os dados. Como cada dado pode
mostrar um valor de 1 a 6, a soma dos dois dados varia de
2 a 12. O programa deve lançar os dados 30000 vezes.
Utilizar um vetor para guardar o número de vezes que
cada possível valor da soma ocorreu. Mostrar o valor da
soma mais frequente e o valor da soma menos frequente.
I
Qual deverá ser a soma mais frequente?
I
Qual deverá ser a soma menos frequente?
33 / 37
Vetores e Matrizes
Exercícios
Exercícios
I
Construir uma classe que represente uma carta de
baralho. Construir um programa que simula a distribuição
de um conjunto de cartas.
34 / 37
Vetores e Matrizes
Sumário
Revisando a aula de hoje
I
Vetores
I
I
I
I
I
I
Definição
Declaração
Visão sobre criação e construtores
Acessando um elemento
O atributo length
Vetores multi-dimensionais (Matrizes)
35 / 37
Vetores e Matrizes
visos gerais - Sobre a aula de ontem
Sumário
Dúvidas???
O Grito (Edvard Munch, 1893)
36 / 37
Vetores e Matrizes
Referências Bibliográficas
Referências Bibliográficas
I H.M. Deitel, P.J. Deitel. Java: Como Programar - 6a Edição. Bookman, 2006.
I B. Eckel. Thinking in Java - 3a Edição. Livro on-line:
http://mindview.net/Books/DownloadSites/
I C. Horstmann. Conceitos de Computação com o Essencial de Java - 3a Edição.
Bookman, 2005.
I J. Dean, R. Deam. Introduction to Programming with Java: A problem Solving
Approach. McGraw-Hill, 2008.
I R. Sedgewick, K. Wayne. Introduction to Programming in Java: An
Interdisciplinary Approach. Addison Wesley, 2008.
I H. Schildt, J. Holmes. A Arte do Java - 3a Edição. McGraw-Hill, 2003.
I R. Sedwick. Algorithms in Java - Parts 1-5: Fundamentals, Data Structures,
Sorting and Searching, Graph, 3rd Edition. Addison Wesley, 2003.
I A.V. Matos. Unified Modeling Language - UML Prático e Descomplicado, 2a
Edição. Érica, 2002.
I G.T.A. Guedes. UML: Uma abordagem prática, 3a Edição. Novatec, 2008.
37 / 37
Download

Programação de Computadores II - Vetores e Matrizes