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

description

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

Transcript of Trabalho vetores

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.