trabalho vetores

22
Programação Programação Orientada a Orientada a Objetos Objetos Vetores em Java Vetores em Java Prof.: Douglas Daniel Del Frari Prof.: Douglas Daniel Del Frari Tiago Pacheco da Silva Tiago Pacheco da Silva Diego Renato Melo Coelho Diego Renato Melo Coelho Evandro Viana de Melo Evandro Viana de Melo

Upload: tv-pernambuco

Post on 25-Jun-2015

2.316 views

Category:

Education


0 download

DESCRIPTION

Trabalho LPOO cujo professor responsável é Douglas Daniel Del Frari (FAFICA).

TRANSCRIPT

Page 1: Trabalho vetores

ProgramaçãoProgramaçãoOrientada a ObjetosOrientada a Objetos

Vetores em JavaVetores em JavaProf.: Douglas Daniel Del FrariProf.: Douglas Daniel Del Frari

Tiago Pacheco da SilvaTiago Pacheco da Silva

Diego Renato Melo CoelhoDiego Renato Melo Coelho

Evandro Viana de MeloEvandro Viana de Melo

Page 2: Trabalho vetores

22

Vetores (Arrays Vetores (Arrays Unidimensionais)Unidimensionais)

Arrays de tipos nativosArrays de tipos nativosO uso de arrays em Java envolve:O uso de arrays em Java envolve:

A referência para o array;A referência para o array;

O array propriamente dito;O array propriamente dito;

Declaração da Referência:Declaração da Referência:

int[ ] posiçãoDeMemória;int[ ] posiçãoDeMemória;

char[ ] letrasDoAalfabeto;char[ ] letrasDoAalfabeto;

double[ ] medidasDeTemperatura;double[ ] medidasDeTemperatura;

int posiçãoDeMemória[ ];int posiçãoDeMemória[ ];

Javac pode gerar código para alocar a referência e fazer verificações estáticas.

Não pode gerar código para alocar o array.

Forma alternativa de declaração

Page 3: Trabalho vetores

33

Vetores (Arrays Vetores (Arrays Unidimensionais)Unidimensionais)

Definição do array:Definição do array:

int[ ] posiçãoDeMemória = new int[1024];int[ ] posiçãoDeMemória = new int[1024];

Declaração da referênciaDeclaração da referência Definição do arrayDefinição do array

Inicialização do array: explícita ou implícita (tipos nativos são inicializados com Inicialização do array: explícita ou implícita (tipos nativos são inicializados com o valor padrão do tipo)o valor padrão do tipo)

posiçãoDeMemóriaposiçãoDeMemória ....

1024 inteiros

Page 4: Trabalho vetores

44

Vetores (Arrays Vetores (Arrays Unidimensionais)Unidimensionais)

Definição do array:Definição do array:

int[ ] posiçãoDeMemória = new int[1024];int[ ] posiçãoDeMemória = new int[1024];

int quantidadeNecessária = 32768;int quantidadeNecessária = 32768;byte[ ] vetorNumérico = new byte[quantidadeNecessária];byte[ ] vetorNumérico = new byte[quantidadeNecessária];

char[ ] letrasDoAlfabeto = char[ ] letrasDoAlfabeto = {‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’x’,’z’};{‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’x’,’z’};

double[ ] medidasDeTemperatura;double[ ] medidasDeTemperatura;medidasDeTemperatura = new double[24*60*60];medidasDeTemperatura = new double[24*60*60];double[ ] duplicata = medidasDeTemperatura;double[ ] duplicata = medidasDeTemperatura;

Definição e inicialização

Cópia ou compartilhamento??

Page 5: Trabalho vetores

55

Vetores (Arrays Vetores (Arrays Unidimensionais)Unidimensionais)

Definição do array:Definição do array:

É possível definir o tamanho do array a partir do valor de uma variável:É possível definir o tamanho do array a partir do valor de uma variável:

int quantidadeNecessária = 32768;int quantidadeNecessária = 32768;byte[ ] vetorNumérico = new byte[quantidadeNecessária];byte[ ] vetorNumérico = new byte[quantidadeNecessária];

É possível definir o tamanho do array a partir de um valor conhecido em tempo É possível definir o tamanho do array a partir de um valor conhecido em tempo de execução???de execução???

System.out.print("Entre com o tamanho do vetor:");System.out.print("Entre com o tamanho do vetor:"); int i = Keyboard.readInt();int i = Keyboard.readInt();

TesteArray v = new TesteArray(i);TesteArray v = new TesteArray(i);

O construtor da classe que encapsula o array recebe o valor lido e declara o array.

Page 6: Trabalho vetores

66

Vetores (Arrays Vetores (Arrays Unidimensionais)Unidimensionais)

Manipulação de array “como um todo”:Manipulação de array “como um todo”:

int[ ] pos = {1000};int[ ] pos = {1000};

int[ ] num = {10,20,30};int[ ] num = {10,20,30};

pos = num;pos = num;

char[] alfa = {'a','b'};char[] alfa = {'a','b'};

pos = alfa; pos = alfa;

A manipulação das referências simula a manipulação do array como um todo.

As referências devem apontar para arrays do mesmo tipo, não necessariamente do mesmo tamanho.

F:\AULAS\POO\aula15>javac DemoTesteArray.java

DemoTesteArray.java:15: incompatible types

found : char[]required: int[] pos = alfa; ^1 errorF:\AULAS\POO\aula15>

Page 7: Trabalho vetores

77

Vetores (Arrays Vetores (Arrays Unidimensionais)Unidimensionais)

Definição de arrays “constantes”:Definição de arrays “constantes”:

final int[] pos = {1000};final int[] pos = {1000};

int[] num = {10,20,30};int[] num = {10,20,30};

pos = num;pos = num;

pos[0] =3000;pos[0] =3000;

System.out.print.(pos[0]);System.out.print.(pos[0]);

Um array declarado como final não pode ser modificado “como um todo”...

F:\AULAS\POO\aula15>javac DemoTesteArray.javaDemoTesteArray.java:11: cannot assign a value to final variable pos pos = num; ^1 error

F:\AULAS\POO\aula15>javac DemoTesteArray.javaF:\AULAS\POO\aula15>java DemoTesteArray3000F:\AULAS\POO\aula15>

... mas pode ter seus componentes alterados!!!!

Page 8: Trabalho vetores

Vetores (Arrays Vetores (Arrays Unidimensionais)Unidimensionais)

Acesso à componentes de arrays:Acesso à componentes de arrays:Índices iniciam em 0 e variam até o tamanho do array menos um.Índices iniciam em 0 e variam até o tamanho do array menos um.int[ ] num = {10,20,30};int[ ] num = {10,20,30};

Acesso à componente inexistente:Acesso à componente inexistente:i = num[4];i = num[4];

Em um array de 3 componentes, as posições válidas são 0,1,2.

10 20 30

num 0 1 2

Erro de execução: Java faz verificação dinâmica de índices de array.

F:\AULAS\POO\aula15>javac DemoTesteArray.javaF:\AULAS\POO\aula15>java DemoTesteArray3000Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4 at DemoTesteArray.main(DemoTesteArray.java:16)F:\AULAS\POO\aula15>

Page 9: Trabalho vetores

Vetores (Arrays Vetores (Arrays Unidimensionais)Unidimensionais)

O campo O campo lengthlength::Todo array unidimensional possui o campo Todo array unidimensional possui o campo lengthlength cuja inicialização é cuja inicialização é

automática.automática.

lengthlength pode ser consultado pode ser consultado

lengthlength não pode ser alterado. não pode ser alterado.

int[] num = {10,20,30};int[] num = {10,20,30};

int[] pos = {10,20};int[] pos = {10,20};

System.out.println(num.length);System.out.println(num.length);

System.out.println(pos.length);System.out.println(pos.length);

pos = num;pos = num;

System.out.println(pos.length);System.out.println(pos.length);

O campo length é alterado automaticamente.

Page 10: Trabalho vetores

Vetores (Arrays Vetores (Arrays Unidimensionais)Unidimensionais)

Arrays de (referências à) instânciasArrays de (referências à) instâncias

O uso de arrays de instâncias em Java envolve:O uso de arrays de instâncias em Java envolve:

A referência para o array;A referência para o array;

O array propriamente dito: as referências para as instâncias;O array propriamente dito: as referências para as instâncias;

As instâncias;As instâncias;

Declaração da Referência para o array:Declaração da Referência para o array:

Funcionario[ ] equipe;Funcionario[ ] equipe;

equipe é um array de referências para instâncias da classe Funcionario.

Page 11: Trabalho vetores

Vetores (Arrays Vetores (Arrays Unidimensionais)Unidimensionais)

Definição do array de (referências à) instâncias:Definição do array de (referências à) instâncias:

Funcionario[ ] equipe = new Funcionario[4];Funcionario[ ] equipe = new Funcionario[4];

Declaração da referência para o arrayDeclaração da referência para o array Definição do arrayDefinição do array

Inicialização do array: implícita (referências à instâncias de classes são Inicialização do array: implícita (referências à instâncias de classes são inicializadas com o valor inicializadas com o valor nullnull))

Page 12: Trabalho vetores

Vetores (Arrays Vetores (Arrays Unidimensionais)Unidimensionais)

equipe[0] = new Funcionario(“Marta”,23456,d1,d2,2500);equipe[0] = new Funcionario(“Marta”,23456,d1,d2,2500);

equipe[1] = new Funcionario(“João”,54354,d1,d2,2500);equipe[1] = new Funcionario(“João”,54354,d1,d2,2500);

equipe[2] = equipe[1];equipe[2] = equipe[1];

Equipe

Marta.....

João.....

null

0 1 2 3

Page 13: Trabalho vetores

Vetores (Arrays Vetores (Arrays Unidimensionais)Unidimensionais)

Polimorfismo:Polimorfismo:Um array pode conter referências à instâncias de subclasses.Um array pode conter referências à instâncias de subclasses.

equipe[4] = new ChefeDeDepartamento(“José”,23456,d1,d2,2500,equipe[4] = new ChefeDeDepartamento(“José”,23456,d1,d2,2500,

“ “Departamente de Pessoal”, d3);Departamente de Pessoal”, d3);

Equipe

Marta.....

João.....

0 1 2 3

José.....Dep...d3

Page 14: Trabalho vetores

Vetores (Arrays Vetores (Arrays Unidimensionais)Unidimensionais)

class ArrayDeObjetosGeometricos {class ArrayDeObjetosGeometricos { private ObjetoGeometrico[] array; private ObjetoGeometrico[] array;

ArrayDeObjetosGeometricos(int número) {ArrayDeObjetosGeometricos(int número) { array = new ObjetoGeometrico[número]; array = new ObjetoGeometrico[número]; }}

public int tamanho() { return array.length; }public int tamanho() { return array.length; }

public void modifica(int posição,ObjetoGeometrico umObjeto) {public void modifica(int posição,ObjetoGeometrico umObjeto) { if ((posição >= 0) && (posição < array.length)) array[posição] = umObjeto; }if ((posição >= 0) && (posição < array.length)) array[posição] = umObjeto; }

public ObjetoGeometrico qualObjeto(int posição) {public ObjetoGeometrico qualObjeto(int posição) { if ((posição >= 0) && (posição < array.length))if ((posição >= 0) && (posição < array.length)) return array[posição];return array[posição]; else return null; else return null; }}

public String toString() {public String toString() { .... }.... } } }

Array de referências à interface ObjetoGeométrico.

Referências apontam para null.

A interface não pode ter instâncias, portanto as referências do array deverão apontar para instâncias de classes que implementem ObjetoGeométrico.

O mesmo acontece com o parâmetro de modifica, e o retorno de qualObjeto.

Page 15: Trabalho vetores

Vetores (Arrays Vetores (Arrays Multidimensionais)Multidimensionais)

Arrays de tipos nativos ou de referências para Arrays de tipos nativos ou de referências para instânciasinstâncias

Declaração da Referência para o arrayDeclaração da Referência para o array

int[ ] [ ] matriz;int[ ] [ ] matriz;

para cada dimensão, um par de colchetespara cada dimensão, um par de colchetes

Page 16: Trabalho vetores

1616

Vetores (Arrays Vetores (Arrays Multidimensionais)Multidimensionais)

Definição do array:Definição do array:

int[ ] [ ] matriz = new int[3] [2];int[ ] [ ] matriz = new int[3] [2];

Declaração da referênciaDeclaração da referência Definição do arrayDefinição do array

Inicialização do array: explícita ou implícita (tipos nativos são inicializados com Inicialização do array: explícita ou implícita (tipos nativos são inicializados com o valor padrão do tipo, referências apontam para null)o valor padrão do tipo, referências apontam para null)

matrizmatriz Array de três componentes.

Cada componente é um array de dois componentes.

Page 17: Trabalho vetores

Vetores (Arrays Vetores (Arrays Multidimensionais)Multidimensionais)

class MatrizDeDoubles {class MatrizDeDoubles { private int colunas; private int colunas; private int linhas; private int linhas; private double[][] matriz; private double[][] matriz; MatrizDeDoubles(int colunas,int linhas) {MatrizDeDoubles(int colunas,int linhas) { this.colunas = colunas; this.linhas = linhas;this.colunas = colunas; this.linhas = linhas; matriz = new double[linhas][colunas];matriz = new double[linhas][colunas]; preencheMatriz(0);preencheMatriz(0); }}public void preencheMatriz(double valor) {public void preencheMatriz(double valor) { for(int lin=0;lin<linhas;lin++)for(int lin=0;lin<linhas;lin++) for(int col=0;col<colunas;col++) matriz[lin][col] = valor; for(int col=0;col<colunas;col++) matriz[lin][col] = valor; }}public double maiorValor() {public double maiorValor() { ........ }} } // fim da classe MatrizDeDoubles} // fim da classe MatrizDeDoubles

Page 18: Trabalho vetores

1818

Vetores (Arrays Vetores (Arrays Multidimensionais)Multidimensionais)

Arrays irregulares:Arrays irregulares:

Declaração da Referência:Declaração da Referência:int[ ] [ ] matriz = new int[3] [ ];int[ ] [ ] matriz = new int[3] [ ];

• Array de duas dimensões e três componentes.

• Cada componente é um array ainda não definido.

• A primeira dimensão precisa ser declarada.

nullnullnull

matriz

Page 19: Trabalho vetores

1919

Vetores (Arrays Vetores (Arrays Multidimensionais)Multidimensionais)

Definição do array irregular:Definição do array irregular:

matriz [0] = new int[4];matriz [0] = new int[4];

matriz [1] = new int[2];matriz [1] = new int[2];

matriz [2] = new int[6];matriz [2] = new int[6];

matriz

Page 20: Trabalho vetores

2020

Vetores (Arrays Vetores (Arrays Multidimensionais)Multidimensionais)

Inicialização explícita do array irregular:Inicialização explícita do array irregular:

matriz[0][0] = 3;matriz[0][0] = 3; matriz[0][1] = 3;matriz[0][1] = 3; matriz[0][2] = 3;matriz[0][2] = 3; matriz[0][3] = 3;matriz[0][3] = 3;

matriz[1][0] = 30;matriz[1][0] = 30; matriz[1][1] = 30;matriz[1][1] = 30;

matriz[2][0] = 300;matriz[2][0] = 300; matriz[2][1] = 300;matriz[2][1] = 300; matriz[2][2] = 300;matriz[2][2] = 300; matriz[2][3] = 300;matriz[2][3] = 300; matriz[2][4] = 300;matriz[2][4] = 300; matriz[2][5] = 300;matriz[2][5] = 300;

matriz

300 300 300 300 300 300

30 30

3 3 3 3

Page 21: Trabalho vetores

Vetores (Arrays Vetores (Arrays Multidimensionais)Multidimensionais)

class TrianguloDePascal {class TrianguloDePascal { public static void main(String[] argumentos) {public static void main(String[] argumentos) { int númeroDeLinhas = 10;int númeroDeLinhas = 10; long[][] triânguloDePascal = new long[númeroDeLinhas][];long[][] triânguloDePascal = new long[númeroDeLinhas][]; for(int linha=0;linha<númeroDeLinhas;linha++)for(int linha=0;linha<númeroDeLinhas;linha++) triânguloDePascal[linha] = new long[2+linha];triânguloDePascal[linha] = new long[2+linha]; triânguloDePascal[0][0] = 1; triânguloDePascal[0][1] = 1; triânguloDePascal[0][0] = 1; triânguloDePascal[0][1] = 1; for(int linha=1;linha<númeroDeLinhas;linha++) {for(int linha=1;linha<númeroDeLinhas;linha++) { for(int coluna=1;coluna<triânguloDePascal[linha].length-1;coluna++) {for(int coluna=1;coluna<triânguloDePascal[linha].length-1;coluna++) { triânguloDePascal[linha][coluna] = triânguloDePascal[linha-1][coluna] + triânguloDePascal[linha][coluna] = triânguloDePascal[linha-1][coluna] + triânguloDePascal[linha-1][coluna-1]; }triânguloDePascal[linha-1][coluna-1]; } triânguloDePascal[linha][triânguloDePascal[linha].length-1] = 1; }triânguloDePascal[linha][triânguloDePascal[linha].length-1] = 1; } for(int linha=0;linha<númeroDeLinhas;linha++) {for(int linha=0;linha<númeroDeLinhas;linha++) { for(int coluna=0;coluna<triânguloDePascal[linha].length;coluna++)for(int coluna=0;coluna<triânguloDePascal[linha].length;coluna++) System.out.print(triânguloDePascal[linha][coluna]+" ");System.out.print(triânguloDePascal[linha][coluna]+" "); System.out.println(); System.out.println(); }} } // fim do método main} // fim do método main } // fim da classe TrianguloDePascal} // fim da classe TrianguloDePascal

Declaração de array bidimensional sem a definição do número de colunas.Definição do número de colunas.

Page 22: Trabalho vetores

VetoresVetoresclass CalculadoraDeLinhaDeComando {class CalculadoraDeLinhaDeComando { public static void main(String[] argumentos) { public static void main(String[] argumentos) { if (argumentos.length != 3) {if (argumentos.length != 3) { System.out.println(“Três argumentos!!!");System.out.println(“Três argumentos!!!"); System.exit(1); }System.exit(1); } int primeiroValor = Integer.parseInt(argumentos[0]); int primeiroValor = Integer.parseInt(argumentos[0]); char operador = argumentos[1].charAt(0);char operador = argumentos[1].charAt(0); int segundoValor = Integer.parseInt(argumentos[2]);int segundoValor = Integer.parseInt(argumentos[2]); int resultado = 0; int resultado = 0; switch(operador) {switch(operador) { case '+': resultado = primeiroValor + segundoValor; break;case '+': resultado = primeiroValor + segundoValor; break; case '-': resultado = primeiroValor - segundoValor; break;case '-': resultado = primeiroValor - segundoValor; break; case '*': resultado = primeiroValor * segundoValor; break;case '*': resultado = primeiroValor * segundoValor; break; case '/': resultado = primeiroValor / segundoValor; break; }case '/': resultado = primeiroValor / segundoValor; break; } for(int índice=0;índice<argumentos.length;índice++) for(int índice=0;índice<argumentos.length;índice++) System.out.print(argumentos[índice]+" ");System.out.print(argumentos[índice]+" "); System.out.println("= "+resultado);System.out.println("= "+resultado); } } } // fim da classe CalculadoraDeLinhaDeComando } // fim da classe CalculadoraDeLinhaDeComando

Vetor de argumentos na linha de comando.

Quantos argumentos foram passados?

Conversão de valores: Classes envelope.

Método da classe String: retira o primeiro caracter.