Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e...
Transcript of Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e...
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
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
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
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();
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];
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
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);
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];
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.
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];
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.
Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
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
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.
Introdução à Programação OO Usando Java - Desenvolvido pela Profa. Luciana Porcher Nedel e alterado pela Profa. Isabel Harb Manssour
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
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])
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.
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.
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];
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][];
...
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”.
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
...
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; }}...
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