Escolar Documentos
Profissional Documentos
Cultura Documentos
Java Basico Modulo 03
Java Basico Modulo 03
www.t2ti.com
1
www.t2ti.com
2
Mdulo
03
Introduo
Antes de iniciarmos vale relembrar que o seu aprendizado depende muito da qualidade do seu estudo, com isto ns queremos dizer que: Os exerccios so parte importante da sedimentao do seu conhecimento. Durante o texto as palavras array e vetores sero utilizadas sempre com o mesmo significado (estruturas de dados seqenciais). Uma coleo nada mais do que um conjunto de elementos contidos em uma nica estrutura em Java um objeto cuja funo oferecer meios de armazenar, disponibilizar, remover, localizar e percorrer o seu contedo. Colees so estruturas de dados que agrupam elementos que formam um grupo natural como por exemplo: baralho (conjunto de cartas), time (conjunto de jogadores), turma (conjunto de alunos) e etc. A seguir conceituaremos superficialmente1 os tipos de colees mais comuns: Vetor: formado por um grupo de elementos acessados atravs do seu ndice;
Pilha: Estrutura de dados onde o ltimo elemento a ser inserido na coleo o primeiro a ser retirado (Baseado no princpio LIFO, Last in, first out); Fila: Coleo onde a ordem de insero representa a ordem de sada dos elementos (Baseado no princpio FIFO, First in, first out); rvores: Estrutura de dados que garante a ordenao dos elementos que a compe;
www.t2ti.com
3
Arrays unidimensionais:
A forma mais eficiente de trabalhar com colees de elementos em Java atravs da construo de vetores (arrays). Em Java, arrays so objetos que armazenam mltiplas variveis do mesmo tipo ou do mesmo sub-tipo (sub-tipo? No se preocupe por enquanto com isto). Observe que apesar da sua eficincia, normalmente, para armazenar dados ns utilizamos estruturas de dados mais flexveis j existentes na linguagem, mais especificamente, no Framework Collections (assunto a ser abordado em mais detalhes durante este curso) ao invs de arrays. Um array um objeto que armazena um nmero pr-definido de elementos, isto , o seu tamanho definido no momento da sua construo. Seus elementos so acessados atravs de ndices que iniciam-se sempre por 0 (zero), ou seja, um array de tamanho quatro ter ndices 0, 1, 2 e 3. Em Java existem diversas formas de declarar, construir e inicializar arrays e a melhor forma de utilizar estas estruturas de dados conhecendo como so realizadas cada uma destas etapas. A seguir apresentaremos cada uma destas etapas e a forma como elas acontecem na prtica:
1. Declarao: Etapa em que a referncia do array declarada; 2. Construo: Aqui definido o tamanho e instanciado o array; 3. Inicializao: Os elementos so inseridos no array.
www.t2ti.com
4
da da da da da da
0 1 2 3 4 5
Neste caso estamos criando um vetor de inteiros (int), perceba que a declarao da varivel ocorre na linha 1, na seqencia temos a criao do vetor (linha 3) e por ltimo a inicializao de cada uma das suas posies. Existem formas mais enxutas de efetuarmos as mesmas etapas mostradas no exemplo anterior. Podemos declarar, construir e inicializar em apenas uma linha da seguinte forma:
int[] outroJogoSena = {23, 12, 55, 02, 07, 19};
No exemplo acima, acontecem quatro coisas em apenas uma linha: I. Declarao de uma referncia a um array de inteiros chamado outroJogoSena; II. Criao de um array com seis posies; III.Inicializao das posies com os valores 23, 12, 55, 02, 07 e 19; IV. Atribuio do novo objeto (array) a referncia outroJogoSena; O outro atalho que a linguagem Java nos permite o seguinte:
int[] outroJogoSena = new int[]{23, 12, 55, 02, 07, 19};
Em ambos os casos todas as etapas continuam sendo executadas (declarao, construo e inicializao). Certo, mas qual o tamanho destes arrays? Quando criamos arrays desta maneira a quantidade mxima de elementos que o array ir armazenar ser igual a quantidade de elementos com que ele foi inicializado, isto , em ambos os casos os arrays seriam suficientes para armazenar at 6 elementos. Caso haja necessidade de
www.t2ti.com
5
Primeira posio (ndice): de qualquer array sempre 0; ltima posio (ndice): sempre o seu tamanho 1 (length - 1).
Exerccio Resolvido Implemente a lgica para realizao de saques em um caixa eletrnico considerando que o mesmo armazena cdulas de R$100,00, R$50,00, $10,00, R$5,00, R$2,00 e nmero possvel de cdulas.
public class CaixaEletronico { public static void main(String[] args) { //Cedulas disponiveis no caixa eletronico int[] cedulas = {100, 50, 20, 10, 5, 2, 1}; //Quantidade total de cedulas entregues ao cliente int quantidadeTotal = 0; //valor a ser sacado pelo cliente int valorReais = 163; //Percorrendo todas as cedulas disponiveis no caixa eletronico for(int i = 0; i < cedulas.length; i++) { //Quantidade de cedulas para o valor cedulas[i] int quantidadeCedulas = valorReais/cedulas[i]; //Impressao da quantidade de cedulas System.out.println("Quantidadde de cedulas de "+ cedulas[i] + ": " +quantidadeCedulas ); //Resto da divisao valorReais %= cedulas[i]; //Quantidade total de cedulas entregues ao cliente quantidadeTotal += quantidadeCedulas; } //Impressao System.out.println("Quantidade total: "+quantidadeTotal); } }
R$20,00, R
Quantidadde de cedulas Quantidadde de cedulas Quantidadde de cedulas Quantidadde de cedulas Quantidadde de cedulas Quantidadde de cedulas Quantidadde de cedulas Quantidade total: 5
de de de de de de de
www.t2ti.com
6
Exerccio Resolvido Implemente um algoritmo que ordene um array com 10 nmeros inteiros. O algoritmo deve efetuar uma comparao de cada elemento com o seu sucessor e se a ordem no for crescente os elementos devem ter suas posies trocadas, este processo deve se repetir at que o array esteja ordenado.
public class OrdenarArray { public static void main(String[] args) { int[] arrayInteiros = {55, 27, 33, 45, 92, 100, 3, 8, 11, 70}; boolean estaOrdenado = false; while(!estaOrdenado) { estaOrdenado = true; for(int i = 1; i < arrayInteiros.length; i++) { if(arrayInteiros[i-1] > arrayInteiros[i]) { estaOrdenado = false; int aux = arrayInteiros[i]; arrayInteiros[i] = arrayInteiros[i-1]; arrayInteiros[i-1] = aux; System.out. println("Ordem atual: "+ arrayInteiros[0]+ " " + arrayInteiros[1]+" "+ arrayInteiros[2]+ " " + arrayInteiros[3]+" "+ arrayInteiros[4]+ " " + arrayInteiros[5]+" "+ arrayInteiros[6]+ " " + arrayInteiros[7]+" "+ arrayInteiros[8]+ " " + arrayInteiros[9]); } } } } }
www.t2ti.com
7
Arrays Multi-dimensionais
Arrays unidimensionais so estruturas de dados bastante simples. Uma estrutura um pouco mais complexa so os arrays multi-dimensionais ou ndimensionais. A funo destes arrays a mesma dos seus irmos unidimensionais porm arrays multi-dimensionais permitem a construo de estruturas de dados mais ricas. No caso de arrays multi-dimensionais a declarao, construo e inicializao realizada conforme exemplos a seguir, observe que os trechos de cdigos so substituveis entre si, isto , equivalentes:
Java permite a construo de arrays com qualquer nmero de dimenses, contudo dificilmente encontram-se arrays com mais de trs dimenses.
Exerccio Resolvido Implemente um programa que construa uma matriz de double 4x4 e para cada clula atribua o valor correspondente a i*j.
www.t2ti.com
8
Resoluo:
1. A matriz ser de double; 2. A classe dever manipular um array bidimensional; 3. O
multiplicados.
public class Matriz { public static void main(String[] args) { double matriz[][] = new double[4][4];//declaracao e construcao da matriz for(int i = 0; i < matriz.length; i++)//percorre a matriz no eixo i { for(int j = 0; j < matriz[i].length; j++)//percorre a matriz no eixo j { matriz[i][j] = i*j;//atribui o valor a celula } } for(int i = 0; i < matriz.length; i++) //percorre a matriz no eixo i { for(int j = 0; j < matriz[i].length; j++) //percorre a matriz no eixo j { //imprime o resultado System.out.println("Valor da posio ["+i+","+j+"]: "+ matriz[i][j]); } }
} }
Sada console:
Valor Valor Valor Valor Valor Valor Valor Valor Valor Valor Valor Valor Valor Valor Valor Valor da da da da da da da da da da da da da da da da posio posio posio posio posio posio posio posio posio posio posio posio posio posio posio posio [0,0]: [0,1]: [0,2]: [0,3]: [1,0]: [1,1]: [1,2]: [1,3]: [2,0]: [2,1]: [2,2]: [2,3]: [3,0]: [3,1]: [3,2]: [3,3]: 0.0 0.0 0.0 0.0 0.0 1.0 2.0 3.0 0.0 2.0 4.0 6.0 0.0 3.0 6.0 9.0
www.t2ti.com
9
Pesquisa: A localizao de um determinado elemento em um array realizada utilizando-se o mtodo binarySearch que retorna a posio que o elemento foi encontrado no array. Caso o elemento no seja encontrado retorna um valor negativo; Preenchimento: Utilizando-se o mtodo fill da classe utilitria Arrays possvel preencher um determinado array com o elemento desejado; Comparao: Dados dois arrays o mtodo equals compara valor a valor e retorna true se os vetores so idnticos em valores e ndices. Agora que conhecemos, superficialmente, a forma como a classe Arrays
fornece mtodos utilitrios vamos ver na prtica como algumas destas funcionalidades so utilizadas. Exerccio Resolvido - Ordenao Implemente um programa que construa um array de inteiros (int) de
tamanho 10.000 com valores atribudos da seguinte forma, cada posio do array conter o resultado da operao 10.000 ndice da posio, isto , a posio 0 ter o valor 10.000, a posio 1 ter o valor 9.999 e assim por diante. Ordene utilizando o algoritmo de ordenao implementado no exerccio resolvido pag. 6 e na seqencia utilizando a classe utilitria Arrays. Compare os tempos de ordenao.
import java.util.Arrays; public class OrdenacaoArray { public static void main(String[] args) { //Criacao do array de 10.000 posicoes int[] arrayInteiros = new int[10000]; //Atribuindo os valores a cada posicao for(int i = 10000; i > 0; i--) { arrayInteiros[arrayInteiros.length - i] = i;
www.t2ti.com
10
Resultado da execuo:
Tempo ordenar 1: 1013 ms Tempo ordenar 2: 9 ms
resultado
desta
execuo
mostra
que
mtodo
de
ordenao
implementado pela classe Arrays foi, aproximadamente, 100 vezes mais eficiente que a implementao feita no exerccio referenciado. Exerccio Resolvido - Pesquisa Implemente um programa que construa um array de inteiros (int) de tamanho 1.000.000 com valores atribudos de acordo com o seu ndice, procure o valor 555.000, entre os valores armazenados no vetor. Compare o tempo gasto utilizando o mtodo binarySearch da classe Arrays e uma procura simples percorrendo todos os elementos do array at encontrar o valor desejado.
import java.util.Arrays; public class PesquisarArray { public static void main(String[] args) { //Criacao do array de 1.000.000 de posicoes int[] numerosInteiros = new int[1000000];
www.t2ti.com
11
} }
Como era esperado, a pesquisa utilizando a classe Arrays foi muito mais eficiente que a pesquisa percorrendo todos os elementos.
Da mesma forma que outras linguagens de programao, em Java possvel passar argumentos atravs da linha de comando. Nestes casos ns invocamos o interpretador e na seqencia passamos os parmetros para nossa aplicao. No exemplo a seguir a classe Teste est recebendo 3 parmetros (param1, param2 e param3) durante a execuo.
www.t2ti.com
12
Estes parmetros so recebidos atravs do mtodo main. Observe abaixo a assinatura do mtodo, os parmetros so agrupados em um vetor de String, ou seja, uma das portas de entrada de informao externa para programas Java o prprio mtodo main.
public static void main(String[] args)
importante compreender que todos os parmetros so recebidos pelo mtodo main como String, para serem tratados como nmeros eles devem ser convertidos, esta converso ser abordada no Mdulo 7. Exerccio Resolvido Implemente um programa Java que imprima e conte quantos parmetros foram passados durante a sua interpretao, execute este programa passando 6 parmetros quaisquer e , aps, execute novamente sem passar parmetros.
www.t2ti.com
13
public class mainParametros { public static void main(String[] parametros) { if(parametros != null) { System.out.println("Foram passados: "+parametros.length+" parametros"); for(int i = 0; i < parametros.length; i++) System.out.println("parametro "+i+": "+parametros[i]); } } }
Abaixo temos a imagem com a execuo deste programa, primeiro foram passados 6 parmetros e na seqencia nenhum.
Agora ns j sabemos como enviar parmetros atravs do prompt de duas formas, uma atravs do mtodo main e outra, apresentada no Mdulo 4, atravs do uso de um Scanner. Mas ns podemos fazer estas mesmas funes de forma um pouco mais elaborada utilizando interfaces grficas. A prxima seo ir descrever como isto pode ser realizado.
www.t2ti.com
14
Mtodo
showConfirmDialog showInputDialog showOptionDialog
Descrio
Utilizado para confirmaes, dilogos cuja resposta seja do tipo sim, no ou cancela. Utilizado para entrada de dados pelo usurio. Uma mistura dos trs outros mtodos, ou seja, pode ser utilizado para informar, para entrada de dados e ainda confirmaes.
Vamos ao exemplo prtico para melhor compreenso, neste exemplo sero utilizados os mtodos showInputDialog e showMessageDialog.
//Importando classe do Swing import javax.swing.JOptionPane; public class Dialogo { public static void main(String[] args) { String nome; //Este comando mostra um dialogo que solicita entrada de dados nome = JOptionPane.showInputDialog("Digite o seu nome: "); String mensagem = nome+" est fazendo o curso Java Iniciante"; //Este comando mostra um dialogo que apenas exibe a mensagem JOptionPane.showMessageDialog(null, mensagem); } }
www.t2ti.com
15
www.t2ti.com
16
1) Crie um programa que percorra um array de 10 posies e imprima o seu contedo. 2) Escreva um programa que some todos os valores contidos em um array de inteiros e calcule a mdia. 3) Desenvolva um programa que dado um array de 10 nmeros inteiros multiplique o primeiro elemento pelo seguinte, o resultado deve ento ser multiplicado pelo prximo elemento at que todos os elementos sejam percorridos. Imprima o valor final. 4) Faa um programa que inverta as posies de um array com 10 elementos. 5) Dados dois vetores quaisquer de booleanos compare-os e informe se ambos so idnticos, para serem idnticos os vetores devem possuir o mesmo tamanho e os mesmos elementos em cada posio. 6) Faa um programa que calcule o produto escalar de dois vetores de double, isto , multiplique cada elemento pelo seu respectivo no outro vetor e some os resultados. 7) Utilizando a classe Scanner, j apresentada em mdulos anteriores, faa um programa que permita o usurio efetuar a entrada de 10 nmeros quaisquer. Ordene estes nmeros utilizando a classe Arrays e imprima o resultado. 8) Faa um programa que receba um parmetro qualquer atravs do mtodo main e informe ao usurio atravs de uma caixa de dilogo qual foi o parmetro passado. 9) Crie um programa que mostre um dilogo, informando que no existem parmetros, caso no seja passado nenhum parmetro atravs da linha de comando. 10)Utilizando a classe Scanner faa um programa que solicite a entrada de 10 nmeros inteiros, logo aps solicite a entrada de mais 5 nmeros inteiros compare os nmeros obtidos e verifique se o segundo vetor est contido dentro
www.t2ti.com
17
www.t2ti.com
18