rffelix70@yahoo.com.br Orientao a Objeto Java 2 Ren Furtado Felix Array ou Matrizes Introduo Segundo Kathy Sierra, uma matriz como uma bandeja com xcaras: 1- declare uma varivel de matriz int. int [ ] nums; 2- Crie uma nova matriz int de tamanho 7. nums [ ] = new int [ 7 ]; Orientao a Objeto Java 3 Ren Furtado Felix Array ou Matrizes Introduo Um Array um grupo de variveis que contm valores (todos) do mesmo tipo.
Por serem considerados objetos, so tipos por referencia, isto , uma referencia a um objeto na memria.
Podem ser tambm tipos primitivos.
O numero de posio chamado ndice do elemento.
A figura abaixo mostra um exemplo de Array de inteiros, chamado C, com 12 elementos: Orientao a Objeto Java 4 Ren Furtado Felix Array Introduo Orientao a Objeto Java 5 Ren Furtado Felix Array Vamos analisar a Array c.
Cada objeto da Array conhece seu prprio tamanho e armazena o uma varivel de instncia Length.
A expresso Array c.lenght para determinar o comprimento do Array. OBS: embora a varivel Length seja public ela no pode ser alterada porque uma varivel final.
Os elementos conhecidos so: c[0] -45, o Valor de c[1] 6 e assim por diante.
Orientao a Objeto Java 6 Ren Furtado Felix Array Vamos analisar a Array c. Se calculssemos a soma dos valores contidos nos primeiros trs elementos de array c e armazenssemos o resultado na varivel sum, escreveramos: sum = c[0] + c[1] + c[2];
Para dividir o valor de c[6] por 2 e atribuir o resultado varivel x, escreveramos:
x = c[6] / 2;
Orientao a Objeto Java 7 Ren Furtado Felix Array Kathy afirma que as matrizes so objetos; As matrizes serviro bem quando voc quiser apenas obter uma lista de coisas de maneira rpida, ordenada e eficiente. Todo elemento de uma matriz apenas uma varivel.
As matrizes sempre sero objetos, no importa se foram declaradas para conter tipos primitivos ou referncias de objetos.
Voc pode ter um objeto de matriz que tenha sido declarado para conter valores primitivos, o objeto pode ter elementos primitivos, mas a matriz propriamente dita nunca de um tipo primitivo. Independentemente do que a matriz armazenar, ela sempre ser um objeto.
Orientao a Objeto Java 8 Ren Furtado Felix Array Criando uma matriz de objetos Dog. 1. Declare uma varivel de matriz Dog. 2. Dog [ ] pets; 3. Crie uma nova matriz Dog com tamanho igual a 7 e a atribua varivel Dog[ ] pets. 4. pets = new Dog [ 7 ]; 5. O que est faltando??????????? 6. Temos uma matriz de referncia Dog, mas nenhum objeto Dog real. 7. pets[0] = new Dog; 8. pets[1] = new Dog;
Orientao a Objeto Java 9 Ren Furtado Felix public class Books { String title; String author; } class BooksTestDrive{ public static void main(String[] args) { Books [ ] myBooks = new Books [3]; int x = 0; myBooks[0] = new Books(); myBooks[1] = new Books(); myBooks[2] = new Books(); myBooks[0].title = "The Grapes of Java"; myBooks[1].title = "The Java Gatsby";
myBooks[2].title="The Java Cookbook"; myBooks[0].author = "bob"; myBooks[1].author = "sue"; myBooks[2].author = "ian"; while (x < 3){ System.out.println(myBooks[x].title); System.out.println(" by "); System.out.println(myBooks[x].author); x = x + 1; } } }
Orientao a Objeto Java 10 Ren Furtado Felix Array Resultado do Array BooksTestDrive: The Grapes of Java by bob ------------------------------------------------------------- The Java Gatsby by sue --------------------------------------------------------------- The Java Cookbook by ian
Orientao a Objeto Java 11 Ren Furtado Felix Array Declarando e criando arrays. So criados com a palavra-chave new. Para criar um objeto de array, especifique o tipo de elemento e o nmero de elementos. Criando um array que contm 12 elementos int e armazena a referencia do array na varivel c do array. int [ ] c = new int [ 12 ]; Ou em dois passos: int c [ ];//declara a varivel de array c = new int [ 12 ] // cria o array, atribui varivel de array.
Orientao a Objeto Java 12 Ren Furtado Felix Array Criando varias arrays em uma nica declarao: String [ ] b = new String [100 ], x = new String [27];
Quando somente uma varivel declarada, os colchetes podem ser colocados depois do tipo ou depois do nome da varivel de array, exemplo:
String b[ ] = new String [ 100 ]; //cria array b String x[ ] = new String [ 27 ]; //cria array x
Orientao a Objeto Java 13 Ren Furtado Felix Array 1 exemplo de array: public class InitArray { public static void main( String [] args) { int [ ] array;// declara o array identificado array = new int [ 10 ]; //cria o objeto do array System.out.println(%s%8s\n, Index, Value); //gera saida do valor de cada elemento do array for (int counter = 0; counter < array.lenght; counter++) System.out.println(%5d%8d\n, counter, array[ counter ]); } }
Orientao a Objeto Java 14 Ren Furtado Felix Array Sada da array:
Index Value 0 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 Orientao a Objeto Java 15 Ren Furtado Felix Array Utilizar um inicializador de array int [ ] n = {10, 20, 30, 40, 50}; Veja que foi criado um array de elementos com valores de ndice 0 a 4. Elemento 20, n [ 1 ], inicializado em 20.
Vamos para mais um cdigo:
Orientao a Objeto Java 16 Ren Furtado Felix Array Vamos inicializar um array de 10 elementos, e exibe em formato tabular: Public class InitArray{ Public static void main( String[ ] args ) { //lista de inicializador especifica o valor de cada elemento Int [ ] array = {32,27,64,18,95,14,90,70,60,37}; System.out.println(%s%s\n,Index, Value);//titulo da coluna //gera sada do valor de cada elemento do array for(int counter = 0; counter < array.lenght; counter++) System.out.printf(%Sd%8d\d, counter, array[counter]); } }
Orientao a Objeto Java 17 Ren Furtado Felix Array Resultado da array:
Index Value 0 32 1 27 2 64 3 18 4 95 5 14 6 90 7 70 8 60 9 37 Orientao a Objeto Java 18 Ren Furtado Felix Array Calculando os valores a armazenar em um array.
A prxima array de 10 elementos e atribui a cada elementos um dos inteiros pares 2 a 20 (2, 4, 6, ..,20). O array exibe em formato tabular. A instruo for nas linhas 12-13 calcula o valor de um elemento do array multiplicando o valor atual da varivel de controle counter por 2 e adicionando 2.
Orientao a Objeto Java 19 Ren Furtado Felix Array public class InitArray{ public static void main(String[]args){ final int ARRAY_LENGTH = 10;//declara constante int[ ] array = new int [ ARRAY_LENGTH];//cria o array //calcula o valor de cada elemento do array for (int counter=0; counter < array.length; counter ++) array [counter] = 2+2 * counter; System.out.printf("%s%8s\n", "Index", "Value"); //gera sada do valor de cada elemento do array for(int counter=0; counter < array.length; counter ++) System.out.printf("%5d%8d\n", counter, array[counter]); } }
Orientao a Objeto Java 20 Ren Furtado Felix Array Saida da array apresentada: A array possui o modificador final para declarar a varivel ARRAY_LENGTH, com valor 10.
Se voc tentar modificar uma varivel final depois que ela inicializada o compilador emite uma mensagem de erro.
Orientao a Objeto Java 21 Ren Furtado Felix Array Somando os elementos de uma array. public class SumArray { public static void main(String[] args) { int [] array = {87, 68, 94, 100, 83, 78, 85, 91, 76, 87 }; int total = 0; for(int counter=0; counter<array.length; counter++) total += array[counter]; System.out.println("Total of array elements: " +total); } } Resultado: Total of array elements: 849
Orientao a Objeto Java 22 Ren Furtado Felix public class BarChart { public static void main(String[] args) { int[]array = {0,0,0,0,0,0,1,2,4,2,1}; System.out.println("Grade distribution:"); //para cada elemento do array, gera uma sada de uma barra do grfico for(int counter=0; counter<array.length; counter++){ //imprime o rtulo de barra ("00-99:","100:") if(counter == 10) System.out.printf("%5d: ", 100); else System.out.printf("%02d-%02d: ",counter * 10, counter * 10 + 9); //imprime a barra asteristicos for (int stars = 0; stars<array[counter];stars++) System.out.print("*"); System.out.println();//inicia nova linha } } }
Orientao a Objeto Java 23 Ren Furtado Felix Array Resultado do array BarChart
Grade distribution: 00-09: 10-19: 20-29: 30-39: 40-49: 50-59: 60-69: * 70-79: ** 80-89: **** 90-99: ** 100: * Orientao a Objeto Java 24 Ren Furtado Felix Array Utilizando os elementos de um array como contadores:
A classe RollDie, utiliza a array frequency para contar a ocorrncia de cada fase do dado. Uma instruo utiliza um valor aleatrio de 1 a 6. O array frequency deve ser grande o bastante para armazenar seis contadores. O valor de array frequency[0] ignorado para incrementar no valor nominal 1. O calculo dentro do colchete onde incrementamos ++frequency avaliado primeiro para determinar qual elemento incrementa e o operador ++ adiciona um elemento.
Orientao a Objeto Java 25 Ren Furtado Felix A classe RollDie import java.util.Random; public class RollDie { public static void main(String[] args) { Random randomNumbers = new Random();//gerador de numero aleatorio int[] frequency = new int[7];//array de contador frequency //lana o dado 6000 vezes //utiliza o valor do dado como indice de frequency for (int roll = 1; roll<=6000; roll++) ++frequency[1+randomNumbers.nextInt(6)]; System.out.printf("%s%10s\n","Face","Frequency"); //gera sada do valor de cada elemento do array for (int face=1; face < frequency.length; face++) System.out.printf("%4d%10d\n", face, frequency[face]);}} Orientao a Objeto Java 26 Ren Furtado Felix Array A classe RollDie
Um possivel resultado da classe Face Frequency 1 1016 2 931 3 993 4 1017 5 995 6 1048 Orientao a Objeto Java 27 Ren Furtado Felix Array Passando arrays para mtodos Para passar um argumento de array para um mtodo, especifique o nome do array sem nenhum colchete. Ex: double [ ] hourlyTemperatures = new double[24]; A chamada do mtodo: modifyArray( hourlyTemperatures ); Todo objeto do array conhece seu prprio comprimento via seu campo length.
Orientao a Objeto Java 28 Ren Furtado Felix Array Passando arrays para mtodos Para um mtodo receber uma referncia de array por uma chamada de mtodo, deve-se especificar um parmetro de array. Ex: void modifyArray( double [ ] b ); Quando um argumento para um mtodo for um elemento de array individual de um tipo primitivo, o mtodo chamado recebe uma cpia do valor do elemento. Esses valores primitivos so chamados escalares ou quantidades escalares. Para passar um elemento de array para um mtodo, utilize o nome indexado do array como argumento na chamada de mtodo Orientao a Objeto Java 29 Ren Furtado Felix Array - exemplo public class PassArray { //main cria a array e chama modifyArray e modifyElement public static void main(String [ ] args){ int [ ] array = { 1, 2, 3, 4, 5 }; System.out.println(Effects of passing reference to entire array:\n + The values of the original array are:); //gera saida de elementos do array original for ( int value : array ) System.out.printf( %d, value); System.out.printf( \n\nEffects of passing array element value:\n + array[3] before modifyElement: %d\n, array[3]);
Orientao a Objeto Java 30 Ren Furtado Felix Array - exemplo modifyElement( array[3]);//tenta modificar o array [ 3 ] System.out.printf( array[3] after modifyElement: %d\n, array[ 3 ]);}//fim main //multiplica cada elemento de um array por 2 public static void modifyArray(int[ ] array2) { for (int counter = 0; counter <= array2.length; counter++) }//fim do mtodo modifyArray //multiplica argumento por 2 public static void modifyElement( int element ) { element *= 2; System.out.printf( value of element in modifyElement: %d\n, element); } } Orientao a Objeto Java 31 Ren Furtado Felix Array - exemplo Resultado da classe PassArray:
Effects of passing reference to entire array: The values of the original array are: 1 2 3 4 5
Effects of passing array element value: array[3] before modifyElement: 4 value of element in modifyElement: 8 array[3] after modifyElement: 4 Orientao a Objeto Java 32 Ren Furtado Felix Arrays multidimensionais Arrays com duas dimenses usadas para representar tabelas de valores organizadas em linhas e colunas. Para identificar, devemos especificar dois ndices. Por conveno o primeiro identifica a linha do elemento e o segundo sua coluna. int [ ] [ ] b = { {1,2}, {3,4}};
Orientao a Objeto Java 33 Ren Furtado Felix Arrays multidimensionais Exemplo mais comum para demonstrar a execuo de um array bidimensional: public class ExArray { public static void main(String[] args) { int m[][] = { {1, 2, 3, 4}, {5, 6} }; int i, j; for (i=0; i< m.length; i++) { System.out.printf("%da. linha: ", (i+1)); for (j=0; j<m[i].length; j++) { System.out.printf("%d ", m[i][j]);} System.out.printf("\n");} } }
Orientao a Objeto Java 34 Ren Furtado Felix Arrays multidimensionais Arrays bidimensionais, so bem flexveis, podem ter diferentes comprimentos de linhas: int [ ] [ ] b = { { 1,2 },{ 3,4,5} }; //O array da linha 0 -> (1,2) //O array da linha 1 -> (3,4 e 5); //Criando arrays bidimensionais com expresses de criao de array. Int [ ] [ ] b = new int[ 3 ] [ 4 ]; //Valores 3 e 4 para especificar o nmero de linhas e nmeros de colunas. Pode-se criar um array multidimensional em que cada linha tem um nmero diferente de colunas: Int [ ] [ ] b = new int [ 2 ] [ ]; //cria 2 linhas b[ 0 ] = new int[ 5 ];//cria 5 colunas para a linha 0 b[ 1 ] = new int[ 3 ];//cria 3 colunas para a linha 1 Orientao a Objeto Java 35 Ren Furtado Felix Arrays multidimensionais Exemplo de array bidimensional: exibindo valores de elemento. public class InitArray{ public static void main( String[ ] args ){ int[ ] [ ] array1 = { {1,2,3},{4,5,6} }; int[ ] [ ] array2 = { {1,2} , {3}, {4,5,6} }; System.out.println("Values in array1 by row are"); outputArray( array1 );// exibe array1 por linha System.out.println("\nValues in array2 by row are"); outputArray( array2 );}//exibe array2 por linha public static void outputArray(int[ ][ ] array){ //faz um loop pelas linhas do array for (int row = 0; row < array.length; row ++) { //faz um loop pelas colunas da linha atual for (int column = 0; column < array[row].length; column++) System.out.printf("%d", array[ row ] [ column ] ); System.out.println();}}}//inicia nova linha de sada
Orientao a Objeto Java 36 Ren Furtado Felix Arrays multidimensionais Exemplo de array bidimensional: exibindo valores de elemento. Resultado da array InitArray.
Values in array1 by row are 1 2 3 4 5 6
Values in array2 by row are 1 2 3 4 5 6
Orientao a Objeto Java 37 Ren Furtado Felix ArraysList
Orientao a Objeto Java 38 Ren Furtado Felix ArraysList Arrays no alteram automaticamente seu tamanho em tempo de execuo para acomodar elementos adicionais. A coleo classe ArrayList <T> (do pacote java.util) fornece uma soluo conveniente para este problema poder alterar dinamicamente seu tamanho para acomodar mais elementos. Exemplo: ArrayList< String > list; Declara list como uma coleo ArrayList que s pode armazenar Strings.
Vamos ver alguns mtodos comuns do ArrayList:
Orientao a Objeto Java 39 Ren Furtado Felix ArraysList
Mtodos Descrio add Adiciona um elemento ao final do ArrayList. clear Remove todos os elementos do ArrayList. contains
Retorna verdadeiro se o ArrayList contm o elemento especificado, caso contrrio, retorna falso. get Retorna o elemento do ndice especificado. indexOf
Retorna o ndice da primeira ocorrncia do elemento especificado no ArrayList. remove Remove a primeira ocorrncia do valor especificado. remove Remove o elemento no ndice especificado. size Retorna o nmero de elementos armazenados na ArrayList.
toArray() Retorna um array contendo os objetos na coleo. trimToSize Arranja a capacidade do ArrayList para o nmero atual de elementos. Orientao a Objeto Java 40 Ren Furtado Felix ArraysList 1 package br.com; 2 import java.util.ArrayList; 3 public class ArrayListCollection { 4 public static void main(String[] args) { //cria um novo ArrayList de strings 5 ArrayList< String > items = new ArrayList< String >( ); 6 items.add("red");//acrescenta um tem lista 7 items.add(0, "yallow");//insere o valor no indice 0 //cabealho
Orientao a Objeto Java 41 Ren Furtado Felix ArraysList 8 System.out.println("Mostra o contedo da lista com lao controlado por contador"); //exibe as cores na lista 9 for(int i=0; i<items.size();i++) 10 System.out.printf("%s ",items.get(i)); //exibe as cores utilizando foreach no mtodo display 11 display(items, "\nMostra o contedo da lista com instruo for aprimorada"); 12 items.add("green");//adiciona green no final da lista 13 items.add("yellow");//adiciona yellow no final da lista
Orientao a Objeto Java 42 Ren Furtado Felix ArraysList 14 display(items, "Lista com dois novos elementos:"); 15 items.remove("yellow");//remove o primeiro yellow display(items, "Remover primeira instncia de yellow:"); 16 items.remove(1);//remove o item no indice 1 17 display(items, "Retire segundo elemento da lista (green):"); //verifica se um valor esta em List 18 System.out.printf("\"red\" is %s in the list\n", 19 items.contains("red")?"":"not"); //exibe o numero de elementos em List
Orientao a Objeto Java 43 Ren Furtado Felix ArraysList 20 System.out.printf("Size: %s\n", items.size());} //exibe os elementos do ArrayList no console 21 public static void display( ArrayList< String> 22 items, String header){ 23 System.out.println( header);//exibe o cabealho //exibe cada elemento nos itens 24 for (String item:items) 25 System.out.printf(" %s", item); 26 System.out.println(); }}
Orientao a Objeto Java 44 Ren Furtado Felix ......JAVA......
Dvidas Orientao a Objeto Java 45 Ren Furtado Felix BIBLIOGRAFIA Introduo ao Java, Daniel Destro do Carmo Use a Cabea Java, Kathy Sierra e Bert Bates Certificao Sun para Programador Java 6, Kathy Sierra e Bert Bates