Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e...

25
ramação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel Harb Manssour (Material adaptado das aulas dos Profs.: Luciana Nedel, Júlio Machado e Bernardo Copstein) Arrays Exercícios

Transcript of Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e...

Page 1: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Arrays Profa. Isabel Harb Manssour(Material adaptado das aulas dos Profs.: Luciana Nedel, Júlio Machado e Bernardo Copstein)

ArraysExercícios

Page 2: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Arrays

Estruturas de dados contendo diversos itens relacionados do mesmo tipo

São estáticos (mantém o mesmo tamanho)Espaço de memória alocada consecutivamente

sob o mesmo nome e tipoPara referenciar um elemento, especifica-se:

nome do array posição

Page 3: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Array

Formato: nomedoarray[posição] Primeiro elemento na posição 0 Array de n elementos denominado c:

c[0], c[1]...c[n-1] Cada array conhece seu próprio tamanho:

c.length

Page 4: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Arrays

Em Java, um vetor (array) é um objeto que aponta para um conjunto de outros objetos ou tipos de dados primitivos. A única diferença entre um vetor e um objeto é uma sintaxe especial para fazer com que se comportem da mesma forma que os arrays encontrados em outras linguagens. A criação de um objeto em Java é feita em 2 etapas: Declaração da referência Object x; Instanciamento do objeto x = new Object();

Page 5: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Arrays

A declaração de um vetor, da mesma forma é feita em 2 etapas: Declaração da referência Object x[]; int i[]; Instanciamento do vetor x = new Object[5]; i = new int[5];

Page 6: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Arrays

Resumindo: Especificar tipo Usar operador new

Alocar número de elementosColocar abre e fecha colchetes após o nome na declaração

Dois passos:int c[]; //declaraçãoc = new int[ 12 ]; //alocação

Um passo:int c[] = new int[ 12 ];

Elementos primitivos são inicializados com 0 ou falso

Page 7: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Arrays

No caso do vetor de inteiros (tipo primitivo) funciona como nas demais linguagens, ou seja, as posições já estão alocadas e prontas para receber valores. No caso de vetores de objetos, o que se tem é um vetor de referências. Os objetos tem de ser alocados individualmente. Exemplo:Ponto vet[] = new Ponto[10];

vet[0] = new Ponto(2.0,2.0);

vet[1] = new Ponto(4.0,4.0);

Page 8: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Arrays

Reuso de variáveis arrayint[] nums;

nums = new int[10];

nums = new int[50];

Page 9: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Arrays

Inicialização de arraysint[] nums = {1, 2, 5, 8, 7};

ouint[] nums = new int[10];nums[0] = 1;nums[1] = 2;…

ou ainda...int[] nums = {1, 2, 5, 8, 7};

int[] outros = nums;

* Um único array com dois nomes.

Page 10: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Arrays

Comprimento de um arrayint[] nums = new int[50];

tamanho = nums.length;

Para criar matrizes, basta acrescentar mais pares de colchetes como se faz em C. int[][] nums = new int[50][30];

Page 11: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

1 // Fig. 7.4: InitArray.java2 // initializing an array with a declaration3 import javax.swing.*;45 public class InitArray {6 public static void main( String args[] )7 {8 String output = "";910 // Initializer list specifies number of elements and11 // value for each element.1212 int n[] = { 32, 27, 64, 18, 95, 14, 90, 70, 60, 37 };1314 output += "Subscript\tValue\n";15 1616 for ( int i = 0; i < n.length; i++ ) 17 output += i + "\t" + n[ i ] + "\n";1819 JTextArea outputArea = new JTextArea( 11, 10 );20 outputArea.setText( output );2122 JOptionPane.showMessageDialog( null, outputArea,23 "Initializing an Array with a Declaration",24 JOptionPane.INFORMATION_MESSAGE );2526 System.exit( 0 );27 }28 }

Inicialização direta (sem operador new)

n.length representa o tamanho do array.

Page 12: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Page 13: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Array

Outro exemplo: Rolando dados Usa um array de 7 elementos (números de 0 a 6) Quando um número é selecionado nos dados,

incrementa o array de elementos

Page 14: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

1 // Fig. 7.9: RollDie.java2 // Roll a six-sided die 6000 times3 import javax.swing.*;45 public class RollDie {6 public static void main( String args[] )7 {8 int face, frequency[] = new int[ 7 ];9 String output = "";1011 for ( int roll = 1; roll <= 6000; roll++ ) {12 face = 1 + ( int ) ( Math.random() * 6 );

1313 ++frequency[ face ];14 }1516 output += "Face\tFrequency";17 18 for ( face = 1; face < frequency.length; face++ )19 output += "\n" + face + "\t" + frequency[ face ];2021 JTextArea outputArea = new JTextArea( 7, 10 );22 outputArea.setText( output );2324 JOptionPane.showMessageDialog( null, outputArea,25 "Rolling a Die 6000 Times",26 JOptionPane.INFORMATION_MESSAGE );2728 System.exit( 0 );29 }30 }

Todos elementos começam com zero. Elementos do array são incrementados quando os dados são rolados.

Page 15: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Page 16: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Arrays

Passagem de parâmetros para métodos por valor: passa uma cópia do argumento por referência: passa o argumento original

Em Java, não se pode escolher Tipos de dados primitivos são passados por valor Objetos são passados por referência

Os objetos originais podem ser alterados dentro do método Arrays em Java são tratados como objetos

Passados por referência

Page 17: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Arrays

Passando arrays Especificar o nome do array sem colchetesint myArray[] = new int[24]; modifyArray(myArray);

Arrays passados por referênciaModificáveis

Header para o método modifyArray deve ser void modifyArray(int m[])

Passando elementos de arrays Passados ao método por valor (i.e., myArray[3])

Page 18: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

1 // Fig. 7.10: PassArray.java2 // Passing arrays and individual array elements to methods3 import java.awt.Container;4 import javax.swing.*;56 public class PassArray extends JApplet {7 JTextArea outputArea;8 String output;910 public void init()11 {12 outputArea = new JTextArea();13 Container c = getContentPane();14 c.add( outputArea );1516 int a[] = { 1, 2, 3, 4, 5 };17 18 output = "Effects of passing entire " +19 "array call-by-reference:\n" +20 "The values of the original array are:\n";2122 for ( int i = 0; i < a.length; i++ )23 output += " " + a[ i ];24

2525 modifyArray( a ); // array a passed call-by-reference26 27 output += "\n\nThe values of the modified array are:\n";

Arrays são passados por referência, assim modifyArray irá alterar o array original.

Page 19: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

34 "a[3] before modifyElement: " + a[ 3 ];35

3636 modifyElement( a[ 3 ] );37 38 output += "\na[3] after modifyElement: " + a[ 3 ];39 outputArea.setText( output );40 }41 42 public void modifyArray( int b[] )43 {44 for ( int j = 0; j < b.length; j++ )45 b[ j ] *= 2;46 }47 48 public void modifyElement( int e )49 {50 e *= 2;51 } 52 }

Elementos individuais passados por valor, apenas a cópia é modificada.

Page 20: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Arrays

Arrays de arrays de comprimento variávelint[][] nums; // Declara um array de arrays

// Define 10 elementos, cada um é um array

nums = new int[10][];

// O segundo array possui 6 elementos

nums[1] = new int[6];

// O quinto array possui 18 elementos

nums[4] = new int[18];

nums = new int[50];

Page 21: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Arrays

Arrays multidimensionaisint[][][] nums = new int[5][10][14];

ouint[][][] nums = new int[10][][];

nums[0] = new int[3][];

nums[3] = new int[40][];

...

Page 22: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Exercícios

1) Faça um programa que leia um string texto, calcule o número de palavras contidas no mesmo e as separe armazenando em um array de strings. Imprima o resultado final.

2) Crie um array de 10 posições, sendo que cada posição contenha um string arbitrário na forma dia/mês/ano (exemplo: “10/03/00”). Analise cada elemento do array e imprima as datas no formato “10 de março de 2000”.

Page 23: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Respostas dos exercícios1)public class TestaArray{ public static void main() { String texto, array[], resultado=""; int i, j, palavras = 0; char c; boolean achouEspaco; texto=JOptionPane.showInputDialog("Digite um texto:");

// Conta a quantidade de palavras for (i = 0; i < texto.length(); i++) if (Character.isWhitespace(texto.charAt(i))) ++palavras; ++palavras; // última palavra

...

Page 24: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Respostas dos exercícios...//Separa as palavras armazenando-as em um array de stringsarray = new String[palavras]; for (i = 0, j = 0; i < palavras; i++, j++) { array[i] = ""; achouEspaco = Character.isWhitespace(texto.charAt(j)); while ( !achouEspaco ) { array[i] += String.valueOf(texto.charAt(j)); j++; if (j < texto.length())

achouEspaco = Character.isWhitespace(texto.charAt(j));

else achouEspaco = true; }}...

Page 25: Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour Arrays Profa. Isabel.

Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour

Respostas dos exercícios

... // Exibe o resultado

JTextArea outputArea = new JTextArea( palavras, 15 );

for (i = 0; i < palavras; i++)

resultado += array[i] + "\n";

outputArea.setText( resultado );

JOptionPane.showMessageDialog(null, outputArea, "Resultado", JOptionPane.INFORMATION_MESSAGE);

System.exit( 0 );

} // fim public static void main()

} // fim public class TestaArray