Amigos, estou fazendo alguns testes sobre Exceções e tenho um código bem simples abaixo.
Vejam que eu tratei o método divideValor(), mas independente do valor que eu inserir nos atributos a e b ele dá erro (exception).!
Pq?
Qual, como e onde é a melhor maneira de tratar essa exceção.!!?
importjava.io.IOException;importjavax.swing.JOptionPane;publicclassTimeToTryOrCatch_GUI{inta,b;protectedvoidsetValor1(inta){this.a=a;}protectedvoidsetValor2(intb){this.b=b;}protectedintdivideValor(){intc;try{c=this.a/this.b;returnc;}catch(Exceptione){System.out.println("Ocorreu um erro inesperado...");return0;}}publicstaticvoidmain(Stringargs[])throwsIOException{Stringv1,v2;v1=JOptionPane.showInputDialog(null,"Insira o primeiro valor","Valor1");v2=JOptionPane.showInputDialog(null,"Insira o segundo valor","Valor2");TimeToTryOrCatch_GUIteste=newTimeToTryOrCatch_GUI();System.out.println(teste.divideValor());//JOptionPane.showMessageDialog(null, "O valor total é " + Integer.toString(teste.divideValor()));}publicTimeToTryOrCatch_GUI(){}}
O teu programa está com problema de lógica, você lê dois valores mas na verdade não são esses dois valores que você está dividindo, pois você não está usando o seu método setValor1 e setValor2 para armazenar os valores que você leu!
T
terra.jr
info_god:
Cara vc ta tentando dividir 0 / 0…
Vc não inicializou suas variaveis.
Eu não acredito que eu fiz a façanha de não inicializar meus atributos a e b.
Desculpem, mas ainda há dúvida.
Qual, como e onde seria a melhor maneira de tratar um erro que possa ocorrer quando o usuário inserir um valor.?
thiago.correa
Depende, o teu método pode lançar a exceção, ao invés de você tratá-la nele próprio, e na chamada dele (no método main) você dá um try/catch, no catch você dá um alerta dizendo o que ocorreu.
T
terra.jr
Agora eu tenho o código corrigido:
importjava.io.IOException;importjavax.swing.JOptionPane;publicclassTimeToTryOrCatch_GUI{inta,b;protectedvoidsetValor1(inta){this.a=a;}protectedvoidsetValor2(intb){this.b=b;}protectedintdivideValor(){intc;c=this.a/this.b;returnc;}publicstaticvoidmain(Stringargs[])throwsIOException{Stringv1,v2;v1=JOptionPane.showInputDialog(null,"Insira o primeiro valor","Teste de velocidade para tratar exceções");v2=JOptionPane.showInputDialog(null,"Insira o segundo valor","Teste de velocidade para tratar exceções");TimeToTryOrCatch_GUIteste=newTimeToTryOrCatch_GUI();teste.setValor1(Integer.parseInt(v1));teste.setValor2(Integer.parseInt(v2));try{System.out.println(teste.divideValor());//JOptionPane.showMessageDialog(null, "O valor total é " + Integer.toString(teste.divideValor()));}catch(ArithmeticExceptione){System.out.println("ERRO - Você está tentando dividir um número por 0 (zero).");}catch(NumberFormatExceptionnfe){System.out.println("ERRO - Formato desconhecido, verifique o numero informado.");}}publicTimeToTryOrCatch_GUI(){}}
Mas vejam que se eu inserir no showInputMessage o valor 555555 por exemplo ele entrará na exception