A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

3. Conceitos Básicos de Programação 4. Desenvolvimento de Programas Orientados a Objetos (Arrays) Carla Merkle Westphall INE-CTC-UFSC

Apresentações semelhantes


Apresentação em tema: "3. Conceitos Básicos de Programação 4. Desenvolvimento de Programas Orientados a Objetos (Arrays) Carla Merkle Westphall INE-CTC-UFSC"— Transcrição da apresentação:

1 3. Conceitos Básicos de Programação 4. Desenvolvimento de Programas Orientados a Objetos (Arrays) Carla Merkle Westphall INE-CTC-UFSC E-Mail: carlamw@inf.ufsc.br URL: http://moodle.inf.ufsc.br INE5603-D (20072) - Programação Orientada a Objetos I

2 2 ARRAYS IntroduçãoIntrodução Declarando e criando arraysDeclarando e criando arrays Exemplos de uso de arraysExemplos de uso de arrays Declaração For avançadoDeclaração For avançado Passando arrays para métodosPassando arrays para métodos Estudo de caso: Classe LivroDeNotas usando um Array para armazenar notasEstudo de caso: Classe LivroDeNotas usando um Array para armazenar notas Arrays multidimensionaisArrays multidimensionais Estudo de caso: Classe LivroDeNotas usando uma Array bi- dimensionalEstudo de caso: Classe LivroDeNotas usando uma Array bi- dimensional Tutoriais na Sun: – http://java.sun.com/docs/books/tutorial/java/TOC.html – http://java.sun.com/javase/6/docs/

3 3 C [ 0 ] -128 C [ 1 ] 8 C [ 2 ] 0 C [ 3 ] 82 C [ 4 ] 64 C [ 5 ] -12 C [ 6 ] 65 C [ 7 ] 43 C [ 8 ] 76 C [ 9 ] 11 Introdução São estruturas de dadosSão estruturas de dados – Na forma de um grupo de posições contíguas de memória – Cada posição mantém um valor do mesmo tipo (vetores de tipos) São estruturas estáticasSão estruturas estáticas – uma vez criados mantém seu tamanho inicial. – Para estruturas dinâmicas a Linguagem Java possui classes especiais (classes Vector e Array)

4 4 Introdução ÍndiceÍndice – Usado para acessar elementos do array Número da posição entre “[“ “]” – Deve ser um inteiro positivo ou uma expressão inteira (que pode ser convertido para inteiro) Long não pode ser usado (erro de compilação) – Primeiro elemento tem um índice zero a = 5; b = 6; c[ a + b ] += 2; // adiciona 2 a c[ 11 ]

5 5 Declarando e iniciando Arrays Declarando e criando arraysDeclarando e criando arrays Inicializando arraysInicializando arrays – Dispensam o operador new o espaço é reservado automaticamente pelo compilador Tamanho do arrayTamanho do array int c[]; // declara a variável array c = new int[ 12 ]; // cria o array, atribui para a variável array //equivalente a int c[] = new int[ 12 ]; // cria um array de 12 elementos int array[] = {10,20,30,40,50}; // array de 5 ints array.length;

6 6 Declarando e iniciando Arrays Erros comuns de programaçãoErros comuns de programação – Na declaração da array não se pode especificar o número de elementos int c[ 12 ]; // isto é um erro de sintaxe – Na declaração de múltiplas variáveis arrays pode levar a erros súbitos. Exemplos: int[] a, b, c; –Correta se o programador quer definir a, b e c como arrays Se quiser definir apenas a como array –int a[], b, c;

7 7 Passando arrays como argumentos Passando arrays como argumentosPassando arrays como argumentos Declarando o métodoDeclarando o método double temperatura[] = new double[24]; modificaArray(temperatura); void modificaArray( int b[] )

8 8 Exemplos do uso de arrays (Exemplo 1) Imprime valores iniciais dos elementos do arrayImprime valores iniciais dos elementos do array public class InitArray { public static void main( String args[] ) { int array[]; // declara a array int array[]; // declara a array final int TAM_ARRAY = 10; // boa prática: constante array = new int[TAM_ARRAY]; // cria espaço para a array array = new int[TAM_ARRAY]; // cria espaço para a array // imprime os valores dos elementos do array System.out.printf( "%s%8s\n", "Indice", "Valor" ); // cabeçalho do texto System.out.printf( "%s%8s\n", "Indice", "Valor" ); // cabeçalho do texto for ( int i = 0; i < array.length; i++ ) System.out.printf( "%5d%8d\n", i, array[ i ] ); System.out.printf( "%5d%8d\n", i, array[ i ] ); }}

9 9 Exemplos do uso de arrays (Exemplo 2) Inicializando arrayInicializando array public class InitArray { public static void main( String args[] ) { int array[] = {2, 4, 8, 10, 12}; // declara e inicializa array int array[] = {2, 4, 8, 10, 12}; // declara e inicializa array // imprime os valors dos elementos do array System.out.printf( "%s%8s\n", "Indice", "Valor" ); // cabeçalho do texto for ( int i = 0; i < array.length; i++ ) System.out.printf( "%5d%8d\n", i, array[ i ] ); System.out.printf( "%5d%8d\n", i, array[ i ] ); }}

10 10 Exemplos do uso de arrays (Exemplo 3) Calculando os valores do elementosCalculando os valores do elementos public class InitArray { public static void main( String args[] ) { int array[]; // declara a array final int TAM_ARRAY = 10; // boa prática: constante array = new int[TAM_ARRAY]; // cria espaço para array array = new int[TAM_ARRAY]; // cria espaço para array for ( int i = 0; i < array.length; i++ ) array[ i ] = 2 + 2 * i; array[ i ] = 2 + 2 * i; // imprime os valors dos elementos do array System.out.printf( "%s%8s\n", "Indice", "Valor" ); // cabeçalho do texto for ( int i = 0; i < array.length; i++ ) System.out.printf( "%5d%8d\n", i, array[ i ] ); System.out.printf( "%5d%8d\n", i, array[ i ] ); }}

11 11 Exemplos do uso de arrays (Exemplo 4) Calculando a soma dos elementosCalculando a soma dos elementos public class InitArray { public static void main( String args[] ) { int array[] = {2, 4, 8, 10, 12}; // declara e inicializa array int total=0; for ( int i = 0; i < array.length; i++ ) total += array[ i ]; total += array[ i ]; System.out.printf( « Total : %d", total ); }}

12 12 Exemplos do uso de arrays Utilizando Gráfico de Barras para apresentar os elementos de um arrayUtilizando Gráfico de Barras para apresentar os elementos de um array – Muitos programas apresentam os dados para o usuário de maneira gráfica Por exemplo, valores numéricos são com freqüência apresentados como barras em um gráfico de barras – Um método simples para apresentar valores numéricos graficamente é com um gráfico de barras que mostra cada valor numérico como um barra de asteriscos (*) – Exemplo Apresentar graficamente a distribuição de notas

13 13 Exemplos do uso de arrays: Gráfico de Barras // Aplicativo para testar a impressão do gráfico de barras public class TesteGraficoBarras { public static void main(String args[]) { GraficoBarrasNotas graficoBarras = new GraficoBarrasNotas(); GraficoBarrasNotas graficoBarras = new GraficoBarrasNotas (); // array passando os valores a serem impressos graficamente int array[] = { 0, 0, 0, 0, 0, 0, 1, 2, 4, 2, 1 }; graficoBarras.setDados(array);graficoBarras.imprime();}} 00- 09 10- 19 20- 29 30- 39 40- 49 50- 59 60- 69 70- 79 80- 89 90- 99 100 Array[i] => Número de ocorrências na faixa

14 14 Exemplos do uso de arrays: Gráfico de Barras (Exemplo 5) // Mantém e apresenta um gráfico de barras com 11 barras public class GraficoBarrasNotas{ public class GraficoBarrasNotas { private int array[]; private int array[]; public void setDados(int array[] ) { public void setDados(int array[] ) { this.array = array; this.array = array; } public void imprime() { public void imprime() { System.out.println("Distribuicao:" ); System.out.println("Distribuicao:" ); // para cada elemento do array, imprime uma linha no gráfico // para cada elemento do array, imprime uma linha no gráfico for ( int i = 0; i < 11; i++ ) { for ( int i = 0; i < 11; i++ ) { // os titulos das linhas ( "00-09: ",..., "90-99: ", "100: " ) // os titulos das linhas ( "00-09: ",..., "90-99: ", "100: " ) if ( i == 10 ) if ( i == 10 ) System.out.printf( "%5d: ", 100 ); System.out.printf( "%5d: ", 100 ); else else System.out.printf( "%02d-%02d: ", i * 10, i * 10 + 9 ); System.out.printf( "%02d-%02d: ", i * 10, i * 10 + 9 ); // imprime barra de asteriscos // imprime barra de asteriscos for ( int estrela = 0; estrela < array[ i ]; estrela++ ) for ( int estrela = 0; estrela < array[ i ]; estrela++ ) System.out.print( "*" ); System.out.print( "*" ); System.out.println(); // imprime linha nova System.out.println(); // imprime linha nova } }}

15 15 Exemplos do uso de arrays: Lança Dados Utilizando os elementos de um array como contadoresUtilizando os elementos de um array como contadores – Elementos de um array podem guardar valores que representam freqüências de ocorrência de determinados eventos. ExemploExemplo – Programa que realiza 6000 lançamentos de um dado e que ao final mostra os resultados dos 6000 experimentos – Simulando o lançamento do dado usando java.util.Random Classe Random gera um stream de números semi-aleatórios –Método nextInt(int n) retorna um número inteiro pseudo-aleatório, uniformemente distribuídos entre 0 (inclusive) e o valor especificado (exclusivo) Não usado 123456 Array[i] => Número de ocorrências da face i

16 16 Exemplos do uso de arrays: Lança Dados (Exemplo 6) // Lanca o dado 6000 vezes e analisa frequencia import java.util.Random; public class LancamentoDeDados { public static void main( String args[] ) { public static void main( String args[] ) { Random numerosAleatorio = new Random(); // gerador de números aleatórios int frequencia[] = new int[ 7 ]; // array de contadores de freqüência // lança dado 6000 vezes; usa valor do dado como indice de frequencia for ( int lancamento = 1; lancamento <= 6000; lancamento++ ) ++frequencia[ 1 + numerosAleatorio.nextInt( 6 ) ]; System.out.printf( "%s%15s\n", "Face", "Frequencia" ); // imprime cada valor do elemento do array for ( int face = 1; face < frequencia.length; face++ ) System.out.printf( "%4d%10d\n", face, frequencia[ face ] ); }}

17 17 Exemplos do uso de arrays: Resultados da Pesquisa Utilizando arrays para analisar resultados de pesquisasUtilizando arrays para analisar resultados de pesquisas – Elementos do array podem manter resultados de uma série de experimentos podem ser analisados para se conhecer mais sobre a pesquisa que representam. – Exemplo: 40 estudantes da universidade avaliaram a comida do Restaurante Universitário, em uma escala de 1 a 10 (péssimo a excelente). Programa armazena as 40 respostas em um array de inteiros e resume o resultado da pesquisa Resp.1Resp.2Resp.3Resp.4Resp.5Resp.6Resp.7...Resp.40 resposta[i] => Resposta da pesquisa pelo aluno i+11234567...10 frequencia[i] => Número de ocorrências da nota i

18 18 Exemplos do uso de arrays: Resultados da Pesquisa (Exemplo 7) public class AvaliaRestaurante { public static void main( String args[] ) { public static void main( String args[] ) { // array contendo as respostas int resposta[] = { 1, 2, 6, 4, 8, 5, 9, 7, 8, 10, 1, 6, 3, 8, 6, int resposta[] = { 1, 2, 6, 4, 8, 5, 9, 7, 8, 10, 1, 6, 3, 8, 6, 10, 3, 8, 2, 7, 6, 5, 7, 6, 8, 6, 7, 5, 6, 6, 5, 6, 7, 5, 6, 4, 8, 6, 8, 10 }; int frequencia[] = new int[ 11 ]; // array de contadores de frequencia // para cada resposta, selecione elemento das respostas e use o valor como // para cada resposta, selecione elemento das respostas e use o valor como // índice de freqüência para determinar o elemento a incrementar // índice de freqüência para determinar o elemento a incrementar for ( int i = 0; i < resposta.length; i++ ) ++frequencia[ resposta[ i ] ]; System.out.printf( "%s%15s\n", "Nota", "Frequencia" ); // imprime os valores dos elementos do array for ( int i = 1; i < frequencia.length; i++ ) System.out.printf( "%4d%10d\n", i, frequencia[ i ] ); }}

19 19 Prevenção de erros Uma exceçãoUma exceção – Indica a ocorrência de um erro na execução do programa Programador pode tratar esta exceção – Quando o programa tenta acessar um elemento fora das fronteiras do array: Ocorre uma exceção ArrayIndexOutOfBoundsException

20 20 For avançado (J2SE 5.0) Interessante para se trabalhar com arraysInteressante para se trabalhar com arrays – Permite uma iteração através dos elementos de um array ou coleção sem usar um contador – Mas não oferece acesso ao índice do array, nem permite alterar os elementos do array Sintaxe:Sintaxe: Exemplo:Exemplo: for ( parametro : nomeArray ) bloco_instruções int array[] = { 87, 68, 94, 100, 83, 78, 85, 91, 76, 87 }; int total = 0; for ( int i = 0; i < array.length; i++ ) total += array[ i ]; // É equivalente a for ( int numero : array ) total += numero; total += numero;

21 21 Passando array para métodos (Ex. 7.1) Dois modos de passar argumentos para métodosDois modos de passar argumentos para métodos – Passagem por valor O valor do argumento é passado na chamada do método Em Java, todo tipo primitivo é passado por valor // Passagem por valor public class passaValor{ public static void main( String args[] ) { public static void main( String args[] ) { int a=1; System.out.printf(“Valor de a: %d\n”,a); incrementa(a); System.out.printlf(“Valor de a após metodo: %d”,a); } public static void incrementa(int x) { x++;}} Valor de a: 1 Valor de a após metodo: 1

22 22 Passando array para métodos Dois modos de passar argumentos para métodosDois modos de passar argumentos para métodos – Passado por referência Chamador dá ao método chamado um acesso direto ao dado do chamador Método chamado pode manipular estes dados Melhora o desempenho em relação a passagem por valor Em Java, todo objeto é passado por referência –Em Java, arrays são objetos –Portanto, arrays são passados para métodos por referência int c[] = {1,2,3,4}; mudaArray(c); public void mudaArray(int x[]) { x[2]=0;} 1234 Array c na memória = 1204

23 23 Passando array para métodos Passagem por referência melhora desempenhoPassagem por referência melhora desempenho – Se fosse passado por valor, uma cópia de cada elemento deveria ser passado – Para arrays grandes frequentemente passados Passagem por cópia poderia desperdiçar tempo e memória

24 24 Passando array para métodos (Exemplo 8) // Passando arrays e elementos de arrays para métodos public class PassArray { // main cria a array e chama os métodos modificaArray e modificaElemento // main cria a array e chama os métodos modificaArray e modificaElemento public static void main( String args[] ) { public static void main( String args[] ) { int array[] = { 1, 2, 3, 4, 5 }; System.out.println( "Efeito da passagem por referencia em array de inteiro:\n" + "Os valores da array original sao:" ); // imprime elementos da array original for ( int valor : array ) System.out.printf( " %d", valor );

25 25 Passando array para métodos modificaArray( array ); // passagem por referencia // imprime elementos da array modificada System.out.println( "\n\nOs valores da array modificada sao:" ); for ( int valor : array ) System.out.printf( " %d", valor ); System.out.printf("\n\nEfeito da passagem do valor do elemento da array:\n" + System.out.printf("\n\nEfeito da passagem do valor do elemento da array:\n" + "array[3] antes de modificaElemento: %d\n", array[ 3 ] ); "array[3] antes de modificaElemento: %d\n", array[ 3 ] ); modificaElemento( array[ 3 ] ); // tenta modificar array[ 3 ] modificaElemento( array[ 3 ] ); // tenta modificar array[ 3 ] System.out.printf("array[3] apos modificaElemento : %d\n", array[ 3 ] ); System.out.printf("array[3] apos modificaElemento : %d\n", array[ 3 ] ); }

26 26 Passando array para métodos // multiplica cada elemento da array por 2 // multiplica cada elemento da array por 2 public static void modificaArray( int array2[] ) { public static void modificaArray( int array2[] ) { for ( int i = 0; i < array2.length; i++ ) array2[ i ] *= 2; array2[ i ] *= 2; } // multiplica argumento por 2 // multiplica argumento por 2 public static void modificaElemento( int elemento ) { elemento *= 2; public static void modificaElemento( int elemento ) { elemento *= 2; System.out.printf("Valor do elemento em modificaElemento: %d\n", elemento ); }}

27 27 Passando array para métodos Pode ocasionar efeitos colaterais indesejadosPode ocasionar efeitos colaterais indesejados public class TesteGraficoBarras { public static void main(String args[]) { GraficoBarrasNotas GraficoBarras = new GraficoBarrasNotas(); GraficoBarrasNotas GraficoBarras = new GraficoBarrasNotas (); int array[] = { 0, 0, 0, 0, 0, 0, 1, 2, 4, 2, 1 }; GraficoBarras.setDados(array); array[5] = 10;GraficoBarras.imprime();}}

28 28 Solução do problema // Mantém e apresenta um gráfico de barras public class GraficoBarrasNotas{ public class GraficoBarrasNotas { int array[]; int array[]; public void setDados(int array[] ) { public void setDados(int array[] ) { this.array = new int[11]; for (int i=0;i <11;i++) this.array[i] = array[i]; } public void imprime() { public void imprime() { System.out.println("Distribuicao:" ); System.out.println("Distribuicao:" ); // para cada elemento do array, imprime uma linha no gráfico // para cada elemento do array, imprime uma linha no gráfico for ( int counter = 0; counter < 11; counter++ ) { for ( int counter = 0; counter < 11; counter++ ) { // os titulos das linhas ( "00-09: ",..., "90-99: ", "100: " ) // os titulos das linhas ( "00-09: ",..., "90-99: ", "100: " ) if ( counter == 10 ) if ( counter == 10 ) System.out.printf( "%5d: ", 100 ); System.out.printf( "%5d: ", 100 ); else else System.out.printf( "%02d-%02d: ", counter * 10, counter * 10 + 9 ); System.out.printf( "%02d-%02d: ", counter * 10, counter * 10 + 9 ); // imprime barra de asteriscos // imprime barra de asteriscos for ( int stars = 0; stars < array[ counter ]; stars++ ) for ( int stars = 0; stars < array[ counter ]; stars++ ) System.out.print( "*" ); System.out.print( "*" ); System.out.println(); // imprime linha nova System.out.println(); // imprime linha nova } }} Cópia da array

29 29 Estudo de Caso: Livro de Notas (Exemplo 9) public class TesteLivroDeNotas { public static void main( String args[] ) { public static void main( String args[] ) { // array de notas dos estudantes // array de notas dos estudantes int arrayNotas[] = { 87, 68, 94, 100, int arrayNotas[] = { 87, 68, 94, 100, 83, 78, 85, 91, 76, 87 }; 83, 78, 85, 91, 76, 87 }; LivroDeNotas meuLivro = new LivroDeNotas( LivroDeNotas meuLivro = new LivroDeNotas( "Desenvolvimento OO", arrayNotas ); "Desenvolvimento OO", arrayNotas ); meuLivro.apresentaMensagem(); meuLivro.apresentaMensagem(); meuLivro.processaNotas(); meuLivro.processaNotas(); }}

30 30 // Livro de notas usando um array para armazenar as notas de um aluno. public class LivroDeNotas { private String nomeCurso; private int notas[]; // array mantendo as notas dos estudantes // construtor com dois argumentos para inicializar nome do curso e notas public LivroDeNotas( String nome, int arrayNotas[] ) { nomeCurso = nome; notas = arrayNotas; } // método para inicializar o nome do curso public void setNomeCurso(String nome ) { nomeCurso = nome; } // método para recuperar o nome do curso public String getNomeCurso() { return nomeCurso; } Estudo de Caso: Livro de Notas

31 31 Estudo de Caso: Livro de Notas // apresenta a mensagem de boas vindas public void apresentaMensagem() { System.out.printf("Bem vindo ao livro de notas do curso\n%s!\n\n", getNomeCurso() ); }

32 32 Estudo de Caso: Livro de Notas // realiza varias operações no dado public void processaNotas() { // apresenta notas imprimeNotas(); // chama método obterMedia para calcular a média das notas System.out.printf("\nMedia da classe: %.2f\n", obterMedia() ); // chama métodos obterMinima e obterMaxima System.out.printf("Nota mais baixa: %d\nNota mais alta: %d\n\n", getMinima(), getMaxima() ); getMinima(), getMaxima() ); // chama imprimeDistribuicao para imprimir gráfico de barras das notas imprimeDistribuicao();}

33 33 Estudo de Caso: Livro de Notas //imprime conteúdo do array notas //imprime conteúdo do array notas public void imprimeNotas() { System.out.println("As notas sao:\n" ); // imprime as notas dos estudantes for ( int aluno = 0; aluno < notas.length; aluno++ ) System.out.printf( "Aluno %2d: %3d\n", System.out.printf( "Aluno %2d: %3d\n", aluno+ 1, notas[aluno]); aluno+ 1, notas[aluno]); }

34 34 Estudo de Caso: Livro de Notas // realiza varias operações no dado public void processaNotas() { // apresenta notas imprimeNotas(); // chama método obterMedia para calcular a média das notas System.out.printf("\nMedia da classe: %.2f\n", obterMedia() ); // chama métodos obterMinima e obterMaxima System.out.printf("Nota mais baixa: %d\nNota mais alta: %d\n\n", getMinima(), getMaxima() ); getMinima(), getMaxima() ); // chama imprimeDistribuicao para imprimir gráfico de barras das notas imprimeDistribuicao();}

35 35 Estudo de Caso: Livro de Notas // determina nota média da classe public double obterMedia() { int total = 0; // initializa total // soma notas for ( int nota : notas) total += nota; // retornaa media das notas return (double) total / notas.length; }

36 36 Estudo de Caso: Livro de Notas // encontra anota minima public int getMinima() { int notaMinima = notas[ 0 ]; // assume notas[ 0 ] como a menor // loop sobre o array notas for ( int nota: notas) { // Se nota é mais baixa que nota mais baixa, // atribua esta a notaMinima if ( nota < notaMinima ) notaMinima = nota; // nova nota mínima } return notaMinima; // returna nota mais baixa }

37 37 // encontra nota maxima public int getMaxima() { int notaMaior = notas[0 ]; // assume nota[ 0 ] como a maior // loop sobre o array notas for ( int nota: notas ) { // Se nota é mais alta que nota mais alta, atribua esta a notaMaior if ( nota > notaMaior ) notaMaior = nota; // nova nota maior } return notaMaior; // retorna nota mais alta } Estudo de Caso: Livro de Notas

38 38 Estudo de Caso: Livro de Notas // Imprime barra de distribuição das notas public void imprimeDistribuicao() { System.out.println("Distribuicao das notas:" ); // armazena freqüência de notas em cada faixa de 10 notas int frequencia[] = new int[11 ]; // para cada nota, incrementa a freqüência apropriada for ( int nota : notas ) ++frequencia[ nota /10 ]; ++frequencia[ nota /10 ]; // para cada freqüência de nota, imprima a barra // para cada freqüência de nota, imprima a barra for ( int contador = 0; contador < frequencia.length; contador++ ) { // imprime titulo ( "00-09: ",..., "90-99: ","100: " ) // imprime titulo ( "00-09: ",..., "90-99: ","100: " ) if (contador == 10 ) if (contador == 10 ) System.out.printf("%5d: ", 100 ); System.out.printf("%5d: ", 100 ); else else System.out.printf("%02d-%02d: ", contador * 10, contador * 10+ 9 ); System.out.printf("%02d-%02d: ", contador * 10, contador * 10+ 9 ); // imprime barra de asterisco // imprime barra de asterisco for ( int estrelas = 0; estrelas < frequencia[contador]; estrelas++ ) for ( int estrelas = 0; estrelas < frequencia[contador]; estrelas++ ) System.out.print("*" ); System.out.print("*" ); System.out.println(); // parte uma nova linha System.out.println(); // parte uma nova linha} } }

39 39 Exemplos do uso de arrays Classificação de arraysClassificação de arrays – Classificar dados significa ordenar os dados em alguma ordem particular, tais como crescente ou decrescente; – Problema muito comum no desenvolvimento de sistemas computacionais; – Existem vários algoritmos de classificação (bolha, bolha bi- direcional, QuickSort,...) Exemplos: CEP, Listas de assinantes de telefone, Ranking em esportes.

40 40 // Classifica os valores de um array em ordem crescente utilizando o algoritmo da bolha public class ClassificaArray { public static void main( String args[] ) { public static void main( String args[] ) { int array[] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 }; int array[] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 }; System.out.println("Itens do array na ordem original"); System.out.println("Itens do array na ordem original"); // acrescenta valores originais do array ao String saida // acrescenta valores originais do array ao String saida for ( int numero: array ) for ( int numero: array ) System.out.printf(" %d", numero); System.out.printf(" %d", numero); bubbleSort( array ); // ordena o array bubbleSort( array ); // ordena o array System.out.println("\n\nItens do array em ordem ascendente"); System.out.println("\n\nItens do array em ordem ascendente"); // acrescenta valores ordenados do array ao String saida // acrescenta valores ordenados do array ao String saida for ( int numero: array ) for ( int numero: array ) System.out.printf(" %d", numero); System.out.printf(" %d", numero); System.out.println(); System.out.println(); } Classificação de arrays: ordem crescente (Exemplo 10)

41 41 Classificação de arrays: ordem crescente // ordena os elementos de um array considerando o algoritmo da Bolha static void bubbleSort(int array2[]) { static void bubbleSort(int array2[]) { // laço para controlar o número de passagens // laço para controlar o número de passagens for ( int passagem = 1; passagem < array2.length; passagem++ ) { for ( int passagem = 1; passagem < array2.length; passagem++ ) { // laço para controlar o número de comparações // laço para controlar o número de comparações for ( int elemento = 0; elemento < array2.length - 1; for ( int elemento = 0; elemento < array2.length - 1; elemento++ ) { elemento++ ) { // compara elementos adjacentes e os troca de lugar se // compara elementos adjacentes e os troca de lugar se // o primeiro elemento for maior que o segundo elemento // o primeiro elemento for maior que o segundo elemento if ( array2[ elemento ] > array2[ elemento + 1 ] ) if ( array2[ elemento ] > array2[ elemento + 1 ] ) troca( array2, elemento, elemento + 1 ); troca( array2, elemento, elemento + 1 ); } // fim do laço para controlar comparações } // fim do laço para controlar comparações } // fim do laço para controlar passagens } // fim do laço para controlar passagens } // fim do método bubleSort } // fim do método bubleSort P12648101289684537 45896812108642P1 i

42 42 Classificação de arrays: ordem crescente // ordena os elementos de um array considerando o algoritmo da Bolha static void bubbleSort(int array2[]) { static void bubbleSort(int array2[]) { // laço para controlar o número de passagens // laço para controlar o número de passagens for ( int passagem = 1; passagem < array2.length; passagem++ ) { for ( int passagem = 1; passagem < array2.length; passagem++ ) { // laço para controlar o número de comparações // laço para controlar o número de comparações for ( int elemento = 0; elemento < array2.length - 1; for ( int elemento = 0; elemento < array2.length - 1; elemento++ ) { elemento++ ) { // compara elementos adjacentes e os troca de lugar se // compara elementos adjacentes e os troca de lugar se // o primeiro elemento for maior que o segundo elemento // o primeiro elemento for maior que o segundo elemento if ( array2[ elemento ] > array2[ elemento + 1 ] ) if ( array2[ elemento ] > array2[ elemento + 1 ] ) troca( array2, elemento, elemento + 1 ); troca( array2, elemento, elemento + 1 ); } // fim do laço para controlar comparações } // fim do laço para controlar comparações } // fim do laço para controlar passagens } // fim do laço para controlar passagens } // fim do método bubleSort } // fim do método bubleSort P12468101289684537 45896812108642P1 iiii i

43 43 Classificação de arrays: ordem crescente // ordena os elementos de um array considerando o algoritmo da Bolha static void bubbleSort(int array2[]) { static void bubbleSort(int array2[]) { // laço para controlar o número de passagens // laço para controlar o número de passagens for ( int passagem = 1; passagem < array2.length; passagem++ ) { for ( int passagem = 1; passagem < array2.length; passagem++ ) { // laço para controlar o número de comparações // laço para controlar o número de comparações for ( int elemento = 0; elemento < array2.length - 1; for ( int elemento = 0; elemento < array2.length - 1; elemento++ ) { elemento++ ) { // compara elementos adjacentes e os troca de lugar se // compara elementos adjacentes e os troca de lugar se // o primeiro elemento for maior que o segundo elemento // o primeiro elemento for maior que o segundo elemento if ( array2[ elemento ] > array2[ elemento + 1 ] ) if ( array2[ elemento ] > array2[ elemento + 1 ] ) troca( array2, elemento, elemento + 1 ); troca( array2, elemento, elemento + 1 ); } // fim do laço para controlar comparações } // fim do laço para controlar comparações } // fim do laço para controlar passagens } // fim do laço para controlar passagens } // fim do método bubleSort } // fim do método bubleSort 3745896812108642P1 i 3789456812108642P1

44 44 Classificação de arrays: ordem crescente // ordena os elementos de um array considerando o algoritmo da Bolha static void bubbleSort(int array2[]) { static void bubbleSort(int array2[]) { // laço para controlar o número de passagens // laço para controlar o número de passagens for ( int passagem = 1; passagem < array2.length; passagem++ ) { for ( int passagem = 1; passagem < array2.length; passagem++ ) { // laço para controlar o número de comparações // laço para controlar o número de comparações for ( int elemento = 0; elemento < array2.length - 1; for ( int elemento = 0; elemento < array2.length - 1; elemento++ ) { elemento++ ) { // compara elementos adjacentes e os troca de lugar se // compara elementos adjacentes e os troca de lugar se // o primeiro elemento for maior que o segundo elemento // o primeiro elemento for maior que o segundo elemento if ( array2[ elemento ] > array2[ elemento + 1 ] ) if ( array2[ elemento ] > array2[ elemento + 1 ] ) troca( array2, elemento, elemento + 1 ); troca( array2, elemento, elemento + 1 ); } // fim do laço para controlar comparações } // fim do laço para controlar comparações } // fim do laço para controlar passagens } // fim do laço para controlar passagens } // fim do método bubleSort } // fim do método bubleSort i 3789456812108642P1 8937456812108642P1

45 45 Classificação de arrays: ordem crescente // ordena os elementos de um array considerando o algoritmo da Bolha static void bubbleSort(int array2[]) { static void bubbleSort(int array2[]) { // laço para controlar o número de passagens // laço para controlar o número de passagens for ( int passagem = 1; passagem < array2.length; passagem++ ) { for ( int passagem = 1; passagem < array2.length; passagem++ ) { // laço para controlar o número de comparações // laço para controlar o número de comparações for ( int elemento = 0; elemento < array2.length - 1; for ( int elemento = 0; elemento < array2.length - 1; elemento++ ) { elemento++ ) { // compara elementos adjacentes e os troca de lugar se // compara elementos adjacentes e os troca de lugar se // o primeiro elemento for maior que o segundo elemento // o primeiro elemento for maior que o segundo elemento if ( array2[ elemento ] > array2[ elemento + 1 ] ) if ( array2[ elemento ] > array2[ elemento + 1 ] ) troca( array2, elemento, elemento + 1 ); troca( array2, elemento, elemento + 1 ); } // fim do laço para controlar comparações } // fim do laço para controlar comparações } // fim do laço para controlar passagens } // fim do laço para controlar passagens } // fim do método bubleSort } // fim do método bubleSort P22468101245683789 37456812108642P2

46 46 Classificação de arrays: ordem crescente // ordena os elementos de um array considerando o algoritmo da Bolha static void bubbleSort(int array2[]) { static void bubbleSort(int array2[]) { // laço para controlar o número de passagens // laço para controlar o número de passagens for ( int passagem = 1; passagem < array2.length; passagem++ ) { for ( int passagem = 1; passagem < array2.length; passagem++ ) { // laço para controlar o número de comparações // laço para controlar o número de comparações for ( int elemento = 0; elemento < array2.length - 1; for ( int elemento = 0; elemento < array2.length - 1; elemento++ ) { elemento++ ) { // compara elementos adjacentes e os troca de lugar se // compara elementos adjacentes e os troca de lugar se // o primeiro elemento for maior que o segundo elemento // o primeiro elemento for maior que o segundo elemento if ( array2[ elemento ] > array2[ elemento + 1 ] ) if ( array2[ elemento ] > array2[ elemento + 1 ] ) troca( array2, elemento, elemento + 1 ); troca( array2, elemento, elemento + 1 ); } // fim do laço para controlar comparações } // fim do laço para controlar comparações } // fim do laço para controlar passagens } // fim do laço para controlar passagens } // fim do método bubleSort } // fim do método bubleSort P22468101245376889 37684512108642P2

47 47 // troca dois elmentos de um array static void troca( int array3[], int prim, int sec ) { static void troca( int array3[], int prim, int sec ) { int elemento; // área de armazenamento temporário para troca int elemento; // área de armazenamento temporário para troca elemento = array3[ prim ]; elemento = array3[ prim ]; array3[ prim ] = array3[ sec ]; array3[ prim ] = array3[ sec ]; array3[ sec ] = elemento; array3[ sec ] = elemento; } } // fim da classe ClassificaArray Classificação de arrays: ordem crescente

48 48 Outros métodos de ordenação Método da Seleção Método da Inserção Entenda como funciona os métodos da Seleção e Inserção!! Quais as diferenças entre os seguintes métodos de ordenação? – Da bolha (bubble sort) – Da seleção – Da inserção

49 49 Arrays multidimensionais Nome do array Índice da linha Índice da coluna

50 50 Arrays Multidimensionais Arrays de array unidimensionalArrays de array unidimensional – Declarando array de duas dimensões b[2][2] int b[][] = { { 1, 2 }, { 3, 4 } }; –1 e 2 inicializa b[0][0] e b[0][1] –3 e 4 inicializa b[1][0] e b[1][1] int b[][] = { { 1, 2 }, { 3, 4, 5 } }; –Tamanho das linhas não precisam ser os mesmos –linha 0 contém elementos 1 e 2 –linha 1 contém elementos 3, 4 e 5

51 51 Arrays Multidimensionais Criando array bidimensional com expressões de criação de arrayCriando array bidimensional com expressões de criação de array – Pode ser criada dinamicamente Array 3 -por- 4 int b[][]; b = new int[ 3 ][ 4 ]; Linhas podem ter diferentes números de colunas int b[][]; b = new int[ 2 ][ ]; // cria 2 linhas b[ 0 ] = new int[ 5 ]; // cria 5 colunas para linha 0 b[ 1 ] = new int[ 3 ]; // cria 3 colunas para linha 1

52 52 Exemplo: Array bidimensional (Exemplo 13) // Inicializando array bidimensional public class InitArray { public class InitArray { // cria e imprime arrays bidimensionais // cria e imprime arrays bidimensionais 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( "Valores na array1 por linha:" ); imprimeArray( array1 ); // apresenta array1 por linha System.out.println( "\nValores na array1 por linha:" ); imprimeArray( array2 ); // apresenta array2 por linha } // imprime linhas e colunas da arary de duas dimensoes public static void imprimeArray( int array[][] ) { // loop através das linhas do array // loop através das linhas do array for ( int linha = 0; linha < array.length; linha++ ) { // loop nas colunas da linha corrente for ( int coluna = 0; coluna < array[ linha ].length; coluna++ ) System.out.printf( "%d ", array[ linha ][ coluna ] ); System.out.println(); // imprime linha nova }}}

53 53 Estudo de Caso: LivroDeNotas (Exemplo 14) Classe LivroDeNotasClasse LivroDeNotas – Array unidimensional Armazena notas dos estudandes em um exame simples – Array bidimensional Armazena notas dos estudantes em diversos exames AlunoP1P2P3 1507580 2605489 3314290 42010056 5506526

54 54 Estudo de Caso: LivroDeNotas // Cria objeto LivroDeNotas usando um array //de notas public class TesteLivroDeNotas { public static void main( String args[] ) { // array de notas do estudantes // array de notas do estudantes int arrayNotas[][] = { {50, 75, 80}, int arrayNotas[][] = { {50, 75, 80}, {60, 54, 89}, {60, 54, 89}, {31, 42, 90}, {31, 42, 90}, {20, 100, 56}, {20, 100, 56}, {50, 65, 26} }; {50, 65, 26} }; LivroDeNotas meuLivro = new LivroDeNotas("Desenvolvimento OO", arrayNotas ); LivroDeNotas meuLivro = new LivroDeNotas("Desenvolvimento OO", arrayNotas ); meuLivro.apresentaMensagem(); meuLivro.apresentaMensagem(); meuLivro.processaNotas(); meuLivro.processaNotas();}}

55 55 Estudo de Caso: LivroDeNotas // Livro de notas usando um array para armazenar as notas. public class LivroDeNotas { private String nomeCurso; private int notas[][]; // array bidimensional das notas dos estudantes // construtor com dois argumentos para inicializar nome do curso e notas public LivroDeNotas( String nome, int arrayNotas[][] ) { nomeCurso = nome; notas = arrayNotas; } // metodo para inicializar o nome do curso public void setNomeCurso(String nome ) { nomeCurso = nome; } // método para recuperar o nome do curso public String getNomeCurso() { returnnomeCurso; }

56 56 Estudo de Caso: LivroDeNotas // apresenta a mensagem de boas vindas public void apresentaMensagem() { System.out.printf("Bem vindo ao livro de notas do curso\n%s!\n\n", getNomeCurso() ); } // realiza varias operações no dado public void processaNotas() { // apresenta notas imprimeNotas(); // chama métodos obterMinima e obterMaxima System.out.printf("Nota mais baixa: %d\nNota mais alta: %d\n\n", obterMinima(), obterMaxima() ); // chama imprimeDistribuição para imprimir o gráfico de distribuição de notas imprimeDistribuicao();}

57 57 Estudo de Caso: LivroDeNotas // imprime conteúdo do array notas // imprime conteúdo do array notas public void imprimeNotas() { System.out.println("As notas sao:\n" ); System.out.print( " " ); // alinha cabeçalho das colunas // cria o cabeçalho da coluna para cada uma das provas for ( int prova = 0; prova < notas[ 0 ].length; prova++ ) System.out.printf( "Prova %d ", prova + 1 ); System.out.println( "Media" ); // cabeçalho da coluna média // cria linhas/colunas do texto representando o array notas for ( int aluno = 0; aluno < notas.length; aluno++ ) { System.out.printf( "Aluno %2d", aluno + 1 ); for ( int prova : notas[ aluno ] ) // imprime nota do aluno System.out.printf( "%8d", prova ); // chama método getMedia para calcular a média do aluno na prova // passa linha do array notas como argumento do getMedia double media = obterMedia( notas[ aluno ] ); System.out.printf( "%9.2f\n", media ); }} }

58 58 Estudo de Caso: LivroDeNotas // determina nota média para o teste public double obterMedia(int cjtDeNotas[]) { int total = 0; // initializa total // soma notas paraum estudante for ( int nota : cjtDeNotas) total += nota; // retornaa media das notas return (double) total / cjtDeNotas.length; }

59 59 Estudo de Caso: LivroDeNotas // encontra a nota minima public int obterMinima() { int notaMinima = notas[0][0]; // assume nota[0][0] como a menor // loop sobre as linhas do array notas for ( int notasAluno[] : notas) { // loop através das colunas da linha corrente for (int nota : notasAluno) { // Se nota é mais baixa que nota mais baixa, // atribua esta a notaMinima if ( nota < notaMinima ) notaMinima = nota; // nova nota mínima }} return notaMinima;// retorna nota mais baixa }

60 60 Estudo de Caso: LivroDeNotas // encontra nota maxima public int obterMaxima() { int notaMaior = notas[0][0]; // assume nota[0][0] como a maior // loop sobre as linhas do array notas for ( int notasAluno[] : notas) { // loop através das colunas da linha corrente for (int nota : notasAluno) { // Se nota é mais alta que nota mais alta, // atribua esta a notaMaior if ( nota > notaMaior ) notaMaior = nota; // nova nota maior }} return notaMaior; // retorra nota mais alta }

61 61 Estudo de Caso: LivroDeNotas // Imprime barra de distribuição das notas public void imprimeDistribuicao() { System.out.println("Distribuicao das notas:" ); // armazena freqüência de notas em cada faixa de 10 notas int frequencia[] = new int[11]; // para cada nota, incrementa a frequencia apropriada for ( int notasEstudante[] : notas ) { for ( int nota : notasEstudante ) ++frequencia[ nota /10 ]; } // para cada frequencia de nota, imprima a barra for ( int contador = 0; contador < frequencia.length; contador++ ) { // imprime titulo ( "00-09: ",..., "90-99: ","100: " ) // imprime titulo ( "00-09: ",..., "90-99: ","100: " ) if ( contador == 10 ) if ( contador == 10 ) System.out.printf( "%5d: ", 100 ); else else System.out.printf( "%02d-%02d: ", contador * 10, contador * 10+9); // imprime barra de asterisco // imprime barra de asterisco for ( int estrelas = 0; estrelas < frequencia[contador]; estrelas++ ) for ( int estrelas = 0; estrelas < frequencia[contador]; estrelas++ ) System.out.print("*" ); System.out.print("*" ); System.out.println(); // parte uma nova linha System.out.println(); // parte uma nova linha} }


Carregar ppt "3. Conceitos Básicos de Programação 4. Desenvolvimento de Programas Orientados a Objetos (Arrays) Carla Merkle Westphall INE-CTC-UFSC"

Apresentações semelhantes


Anúncios Google