Parte3 A

Você também pode gostar

Você está na página 1de 6
Se eee eee eccey ‘S"e"o"o"e 3.2.6 Uso de getMessage e printStackTrace Em determinadas aplicagées torna-se necessirio descobrir 0 tipo de erro e em que linha do programa ele ocorreu. Para reconhecer esses erros, sio utilizados os métodos getMessage e printStackTrace (a definicio e a criacio de métodos so estudadas em detalhes no Capitulo 5). O mé- todo getMessage serve pars retornar a mensagem armazenada numa excecao qualquer. 8 0 método printStack race retorna o tipo de excegao gerado e informa em que linha da classe ocorreu o erro. ere (© Exemplo 3.9 traz uma pequena demonstracdo, com fins didéticos, para que o leitor compreenda mais claramente a utlizacio dos métodos getMessage e printStackTrace. Exemplo 3.9 —Uistagem da classe GetMessape€PrntStackrace Funcionalidades comentadas do Exemplo 3.9: > Linha 6: produz uma exce¢io de divisio por zero (x/0), a qual seré tratada na linha 8 por meio de catch (Exception erro). Note que nio foi definida a excecio aritmética ArithmeticException, como feito anteriormente. Quando for utilizado Exception em um bloco catch, qualquer exce- Go gerada, isto é qualquer tipo de exce¢o, seré tratada nesse bloco. [sso equivale a dizer que ion pode ser considerado uma excecio default, caso 0 desenvolvedor nao queira tratar to- dos 0s tipos de erro que podem ser gerados durante a execucdo de um programa, > Linha 9: 0método getMessage se encarrega de retornar 0 erro ocorrido (no caso: /by zero~ divi- s80 por zero). > Linha 10: 0 método printStackTrace retorna diversas informacées tipo de excecio, a mensagem de erro, onome da classe que gerou o erro, o nome do método em que oerro ocorreu eo nimero de linha do programa. No exemplo so retornadas as seguintes informacdes: javalang-ArthmeticException (tipo dda excegacl,/ by zero (mensagem de erro), cap03 GetMessageFPrintStackTrace (pacote nome da classe), ‘main (nome do método) e 6 linha em que ocorreu o erro) ‘AFigura 3.10 apresenta os resultados obtidos com a execucio do Exemplo 3.9: few ae -| a —=—— | |@ = Figura 3.10 Tea de execugo d 3.3 Lagos de repetigao Os lacos de repeti¢io (looping) formam uma importante estrutura nas inguagens de programacso por possibilitarem a repeticao da execucao de um bloco de instrucdes em um programa. Eles determinam EA ‘que um certo bloco seja executado repetidamente até que uma condicéo especifica ocorra, Arepk uma das estruturas mais usadas em programacio, possibilitando a criacéo de contadores, temporizado- res, rotinas para classificacio, obtencio e recuperagao de dados. A criagio de lacos de repeticio em Java 6 felta a partir das estruturas for, while e do-while. 3.3.1 Uso do lago for A.instrugao for & um tipo de contador iit, isto 6, ela reaiza a contagem de um valor inicalco- nhhecido até um valor final também conhecido, Uma possivel representacSo grfica daestruturade fun- cionamento de um laco de repeticao pode ser visualizada na Figura 3.11. No inicio da execucao da es- truturaéincalzada uma variével. Apés sso, o valor dessa variavel é verificado na condic3o(losango), © enquanto essa condigdo for verdadeira o bloco de instrugées sera executado dentro da estrutura Somente quando a condicZo se tornarfalsa & que a execuga0 serS desviada para o final da estrutura o lago. 0 increment ou decremento do valor da variavel éessencial para que olago tenha uma sada {encerre}, caso contrario a execugao nunca sairiadolago, Vamos a um exemplo: suponha que voce queira escrever seu nome na tela trés vezes. Pode ser sade um laco de repeticao para iso. Aestrutura funcionaria da seguinte forma (tente acompanhar a sequénciados passos olhando na representagio da Figura 3.11} 41. Uma variével chamada x@ inicializada com o valor 1 2. Acondicao veriia sex pula para o passo 5. 3. Seunome é impresso.em tela, 4. Ovalor de. éincrementado (x+4) e volta ao passo 2. 5. Aestrutura éencerrada, ito 6,0 lago de repetico terminou. Se a condigao for verdadeira, a0 executados os passos 3 ¢ 4, se nao Astra de rept com for conten ua sel decane poy oe po ‘Secmineuaceeteopeanfa sent ioe > erin cone nremento ude > Inalaace € vor il da varie Conta dsl > Condi: conn una expresso boolean ‘eldscontlepoe sun dont cobs (me Iniciaizagao da vartavel (iatsa) Condtigso [verdadeiral decrescida. Esse incremento pode ser reali- zado por meio de uma varidvel inteira ou com Ponto flutuante, permitindo pequenos incre~ rmentos decimais. Exemplo: Incrementoldecremento For (int coni-0; cont sor (double x5; x<-10; x-x10.5) —-fazovalor de x variar de 5 até 10 com passo de 0.5, ou seja,5.0-55-60-65- 95-100, > cor {int x20; 9-07 x-n=2) faz 0 valor de x variar de 10 até 0 com passo de-2, ou seja, 10-8-6-4-2-0. > sor (int xear xccky x14) —fazovalor de x ariar dea até b com passo de 1 (© Exemplo 3.10 mostra uma forma de uso bem simples da estrutura for para fazer uma contagem progressivade Oate 9 Exempla 8.10 ~Listagom da classe CortadorProgressivoFor ‘A Figura3.12 exibe o resultado obtido com 2 execucio do Exemplo 3.10. Figura 8.12 ~ Tele de execugdo do Exemplo 3.10. (© Exemplo 3.11 demonstra o uso do for na simulagao de um rel6gio, Exempla 311 ~Uistapun da classe Reloglo 3 pesie teste esa mtn(tcing sree) ¢ 58 Funcionalidades comentadas do Exemplo 3.21: > Linhas 5 a 7: contém os lagos de repeti¢go para o controle das horas (0 a 23), minutos (0 a 59) ¢ segundos (0a 59). Um ponto a ser observado ¢ a possibilidade de criagao de um laco de repeticao dentro do outro. Quando isso ocorre, olago interno é executado n vezes, de acordo como nimero de vezes definido pelo lago superior. Como exemplo, observe as linhas 7 a 17. lago mais interno (s) controla os segundos ¢ & executado 60 vezes a cada minuto (0 laco superior). Da mesma forma, Iago das minutos serd executado 60 vezes a cada hora (olago superior) {nha 10: contém Thread sleep(1000); que invoca um temporizador que espera mil milissegundos (um segundo) até 2 execucao da préxima instrugao. Esse procedimento pode gerar uma excecioe por isso deve ser usado dentro de um bloco try, ou pode ser desconsiderado caso vocé prefira usar a cléusula throws, citada anteriormente. No ultimo caso, o exemplo ficarla um pouco mais resumi- do: deveria ser adicionado “throws InterruptedException’ ao final da linha e retiradas as linhas, e133 16.0 uso de Thread talvez nao seja a melhor forma de se criar uma temporizado: para Isso existem outras classes como Timer e TimerTask, cujo estudo foge aos objetivos. Também nao 6 objetivo estudar threads. Além disso, o uso do método sleep dentro de um laco de repeti¢o nao 6 muito recomendado por questdes de desempenho. > Linhas 11 e 12: controlam o final da execucéo do relégio. Quando o relégio contar dez segundos, 0 programa & encerrado por meio de Systemexit(0) Sempre que for necessatioforcar o encerramento ‘de um programa, o método exit pode ser usado. Se vocé estiver usando uma IDE (NetBeans Eclipse) ‘existe um boto especfico para isso, um boto de stop, normalmente um quadradinho vermelho. Os resultados obtidos ao executar o Exemplo 3.11 podem ser vistos na Figura 3.13, Figura 8.13 ~Tela de execugao Go Exempo 3.1 3.3.2 Uso do lago while (Owhileé outro lago condicional, sto & um conjunto de instrugdes que sao repetidas enquanto ore sultado de uma expressio logica (uma condi¢3o)é avaliade como verdadero. Vejaa seguir sua sintaxe: while () ‘conjunto de instru ‘Aiinstrugio while avalia 0 resultado da expressio (condicéo) antes de executar as instrucées do bloco {}, assim é possivel que as instrugdes nunca sejam executadas, caso a condigdo seja inicialmente falsa, Um problema tipico, relacionado & avaliaco da condico while, 60 |ac0 infinito, Caso a condic¢So nunca se torne falsa,o aco serd repetido infinitamente. A mesma representacao da Figura 3.11 é valida para olaco por meio da instrucao while Hi outro tipo de laco condicional, o chamado do-while, cue é bem parecido com while, porém ‘© conjunto de instrugées é executado antes da avaliacao da expressao logica. Isso faz com que essas instrugdes sejam executadas pelo menos uma vez. Vela como sintaxe do do-while é bem parecida com ado while: EO Fee eee ee ee cconjunto de inscrugses> ‘Autilizacio da estrutura while ou do-while fica a critério do desenvolvedor, pois com as duas for- mas é possivel chegar a resultados semelhantes. A Figura 3.14 apresenta a representagao gratfica da estrutura do-while. Compare-a coma estrutura while da Figura 3.11, Inicilizagdo da varie Instrugtes ~~ (——) [verdadeira) {ratsa) Cconaligso rm ©-—____ fea 4 Ree tea oes oe (© Exemplo 3.12 demonstra a utilizagao das estruturas while e do do-while. Funcionalidades comentadas do Exemplo 3.12: Este exemplo recebe um nimero do ususrio e inicia sua contagem regressiva até zero, pausada- mente, decrescendo de um em um. > Linha 6: 0 usudrio digita um nimero que sera armazenado na variavel limite. Caso ocorra algum erro de conversio, o direcionamento do programa é alterado para NumberFormatException (i- ‘nha 20), conforme abordamos anteriormente. > Linha 8:0 valor da variavel limite ¢ armazenado na variével contador. Isso foi realizado para man ter o valor fornecido pelo usuério que sers utilizado mais frente na classe. > Linhas 9a 12: uma vez que a varidvel contador receba um niimero inteiro positivo, érealizada sua contagem decrescente até o valor zero por meio da estrutura while. Caso seja fornecido um valor rnegativo, a contagem nao é realizada porque a expresso do while serd falsa. A cada ciclo (chama- ddo também de iteracio) 0 valor da varidvel contador é impresso na tela linha 10) e decrementado (linha 11) até-4, quando o lago termina, pois -1 nao é maior ou igual azero. > Linha 14:0 valor da varisvel contador é zerado para que a contagem progressiva do préximo lago se inicie do zero, jé que atéa linha anterior o valor da variével contador & =. has 15 até 18: contém o laco do-while. Como ja dito, o do-while executa 0 bloco de instrucdes, pelo menos uma vez e depois verifica a condicio de sua expresso. No caso, o valor da varisvel Contador varia de zero até 0 valor que 0 ususrio forneceu iniclalmente, armazenado na varis- vel limite, portanto a contagem sera progressiva. Exempla 3:12 Listagom a classe Conadorile A Figura 3.15 apresenta resultado do Exemplo 3.12 executado, Figura 3.15 ~ Tela de execugdo do Exempl 3.12, Exercicios para pratica da linguagem Java ‘L._Usando JOptionPane, elabore uma classe que receba o nome de um produto e o seu valor: O des conto deve ser calculado de acordo com o valor fornecido conforme a Tabela 3.1. Utilizando a estru- turaif-else, apresente em tela onome do produto, valor original do produto e o novo valor depois de ser realizado 0 desconto. Caso 0 valor digitado seja menor que zero, deve ser emitida uma mensa- gemdeaviso. AFigura 3.16 lustraa execugao do Exercicio 3.1, Tabela Valor (RS) Desconto (%) a8 <200 5 5200 ¢ <500 é S=500 8 <1000 7 >=1000 8 on

Você também pode gostar