Try/catcher chatin

16 respostas
E

:?: galera to com esse app que fiz estou querendo “injetar” um try/catcher nele e jah tentente e nao consegui
:arrow: toda ajuda posivel sera bem vinda
tah ai o codigo da parada :!:

import javax.swing.JOptionPane;
import java.text.DecimalFormat;

public class questao1 {

public static void main(String[] args) {
   int opc,parc;
    float pag,parc1,parc2,parc3;

    DecimalFormat forma = new DecimalFormat();

        String entrada = JOptionPane.showInputDialog(null, "---------------MENU---------------" + "\n" + "Escolha uma opção:" + "\n" + "1 Pagamento em dinheiro" + "\n" + "2 Pagamento a prazo" + "\n" + "3 Pagamento em cartão de débito");
        opc = Integer.parseInt(entrada);
        switch (opc){

            case 1:
			    entrada = JOptionPane.showInputDialog(null,"Digite o valor do pagamento:");
			    pag = Float.parseFloat(entrada);

                                forma.applyPattern("R$ #,##0.00") ;
			    JOptionPane.showMessageDialog(null,"pagamento a vista:\n"+  forma.format(pag));
			break;

            case 2:
		        entrada = JOptionPane.showInputDialog(null,"Digite o valor do pagamento:");
		        pag = Float.parseFloat(entrada);
		        entrada = JOptionPane.showInputDialog(null,"Digite a quantidade de meses que sera dividido:");
		        parc = Integer.parseInt(entrada);
		        parc1 = pag / parc;
		        parc2 = (parc1 * 10)/ 100 + parc1;
		        parc3 = parc2 * parc;
                            forma.applyPattern("R$ #,##0.00") ;
		            JOptionPane.showMessageDialog(null,"Valor por parcela\n"+  forma.format(parc2));
		            JOptionPane.showMessageDialog(null,"valor total:\n"+forma.format(parc3));
		    break;

            case 3:
	            entrada = JOptionPane.showInputDialog(null,"Digite o valor do pagamento:");
	            pag = Float.parseFloat(entrada);
	            parc2 = (pag * 5)/ 100 + pag;
	                JOptionPane.showMessageDialog(null,"volar total\n"+ "R$"+ parc2);
	        break;

            default:
	            JOptionPane.showMessageDialog(null,"opção inválida");
  }
}
}

16 Respostas

A

Deixa eu te perguntar:

1 - Qual exception vc está tentando tratar?
2 - Qual erro de compilação está aparecendo para vc?

E

NumberFormatException erro

no netbeans tah dando erro no fechamento das chaves
fecho tudo certin ainda fala q falta ou ñ consta o try

A

Dicas:

1 - Pesquise sobre a exception java.lang.NumberFormatException;

2 - Dê uma lida em http://download.oracle.com/javase/tutorial/essential/exceptions/.

A

Aliás, sabe o porquê que está dando essa exception?

Posta o código dando erro…

E

fala

matheusconan

Foi mal brother, mas acho que estou ficando maluco… rsrsrs

Onde estão o try e o catch neste código???

O pessoal do guj deveria customizar a área de post para código tb viu!!!

E

ñ ñ coloquei sem try/catcher msm jah mudei posiçao aki trocentas vezes pra acertar o erro
preciso implementar nesse codigo

vielmateus

Acredito que esse seja o trecho de código que você precisa:

try {
            opc = Integer.parseInt(entrada);
        } catch (NumberFormatException ex) {
            JOptionPane.showMessageDialog(null, "Somente Inteiro");
        }

É sempre bom documentar o máximo sua dúvida, para que fique fácil o entendimento.
Sempre coloque o código em tags Code.

A

Só pra complementar:

NumberFormatException ocorre qdo. a aplicação tenta converter uma string para um tipo numérico porém a string não tem o tipo apropriado ou seja não é um número.

Fonte: JavaDoc 1.6 (ela deve ser sua melhor amiga nessa fase de aprendizado) :smiley:

A

vielmateus:
Acredito que esse seja o trecho de código que você precisa:

try {
            opc = Integer.parseInt(entrada);
        } catch (NumberFormatException ex) {
            JOptionPane.showMessageDialog(null, "Somente Inteiro");
        }

É sempre bom documentar o máximo sua dúvida, para que fique fácil o entendimento.
Sempre coloque o código em tags Code.

Só atualizando o código nessa base dá erro de compilação…

A

Só pra acrescentar:

Tirar:

opc = Integer.parseInt(entrada);

Por:

try {  
		            opc = Integer.parseInt(entrada);  
		        } catch (NumberFormatException ex) {  
		            JOptionPane.showMessageDialog(null, "Somente Inteiro");  
		        }  
		        
		        opc = Integer.parseInt(entrada);
matheusconan

Cara,
As dicas dos nossos colegas aqui são bem válidas…

Lembre-se sempre de colocar o try / catch onde possa surgir uma exceção!

Na conversão por exemplo, se o usuário-gênio escreve ao invés de colocar um inteiro, vai lançar uma exceção!

Em castings tb poderão ocorrer, mas aí vc deve estar atento à sua implementação…

Espero que consiga resolver,

[]'s

Lucas_Abbatepaolo

Pessoal vamus pegar leve com o cara…rs

Logico que toda informação é bem vinda, mais ele é iniciante e isso que ele postou aqui parece ser um programinha de faculdade, não é necessario jogar tanta informação assim no cara…

Como todos disseram ai pra cima a NumberFormatException está provavelmente acontecendo quando voce tenta pegar o que foi digitado e convertelo em um inteiro, sendo que esta conversão não é possivel.

na minha opnião que para o q vc esta querendo fazer o try/catch nao seria o ideal e sim vc verificar c o conteudo digitado está dentro do que vc espera…
por exempo:

antes do seu switch vc coloca um if e tenta fazer a conversao da “entrada” depois do if.

if(entrada.equalsToIgnoreCase("1") || entrada.equalsToIgnoreCase("2") || entrada.equalsToIgnoreCase("3")){
   opc = Integer.parseInt(entrada);  
   switch (opc){  
     //seu codigo aqui
  }
}
A

Não faça disso uma verdade.

Deve-se analisar caso a caso o tratamento de exceções.
Há exceções que devem ser tratadas: use try-catch
Há exceções que devem ser evitadas: use condicionais como if
Há exceções que devem ser delegadas: se não for filha de RuntimeException, adicione clausulas throws na assinatura do método e, se necessário, throw da exceção no corpo do método.

Evite a má prática do uso de try-catch como um if. Apesar que, nem sempre é simples fazer isso como em caso de parses de String para algum tipo numérico (precisaria testar através de regex).

Perfeito.

WellingtonRamos

Antes de mais nada, coloque teu código entre tags CODE. É importante garantir legibilidade para ajudar quem quer te ajudar.

Outra coisa, NumberFormatException normalmente é uma Exception unchecked e muitas vezes o problema pode ser corrigido sem necessidade de try-catch.
Em qual linha ocorre o erro? E qual o stackTrace que é gerado?

e.con:
:?: galera to com esse app que fiz estou querendo "injetar" um try/catcher nele e jah tentente e nao consegui :arrow: toda ajuda posivel sera bem vinda tah ai o codigo da parada :!:
import javax.swing.JOptionPane;
import java.text.DecimalFormat;

public class questao1 {

     
    public static void main(String[] args) {
       int opc,parc;
        float pag,parc1,parc2,parc3;

	    DecimalFormat forma = new DecimalFormat();

            String entrada = JOptionPane.showInputDialog(null, "---------------MENU---------------" + "\n" + "Escolha uma opção:" + "\n" + "1 Pagamento em dinheiro" + "\n" + "2 Pagamento a prazo" + "\n" + "3 Pagamento em cartão de débito");
            opc = Integer.parseInt(entrada);
            switch (opc){

                case 1:
				    entrada = JOptionPane.showInputDialog(null,"Digite o valor do pagamento:");
				    pag = Float.parseFloat(entrada);

                                    forma.applyPattern("R$ #,##0.00") ;
				    JOptionPane.showMessageDialog(null,"pagamento a vista:\n"+  forma.format(pag));
				break;

                case 2:
			        entrada = JOptionPane.showInputDialog(null,"Digite o valor do pagamento:");
			        pag = Float.parseFloat(entrada);
			        entrada = JOptionPane.showInputDialog(null,"Digite a quantidade de meses que sera dividido:");
			        parc = Integer.parseInt(entrada);
			        parc1 = pag / parc;
			        parc2 = (parc1 * 10)/ 100 + parc1;
			        parc3 = parc2 * parc;
                                forma.applyPattern("R$ #,##0.00") ;
			            JOptionPane.showMessageDialog(null,"Valor por parcela\n"+  forma.format(parc2));
			            JOptionPane.showMessageDialog(null,"valor total:\n"+forma.format(parc3));
			    break;

                case 3:
		            entrada = JOptionPane.showInputDialog(null,"Digite o valor do pagamento:");
		            pag = Float.parseFloat(entrada);
		            parc2 = (pag * 5)/ 100 + pag;
		                JOptionPane.showMessageDialog(null,"volar total\n"+ "R$"+ parc2);
		        break;

                default:
		            JOptionPane.showMessageDialog(null,"opção inválida");
	  }
    }
    }
WellingtonRamos

Não faça disso uma verdade.

Deve-se analisar caso a caso o tratamento de exceções.
Há exceções que devem ser tratadas: use try-catch
Há exceções que devem ser evitadas: use condicionais como if
Há exceções que devem ser delegadas: se não for filha de RuntimeException, adicione clausulas throws na assinatura do método e, se necessário, throw da exceção no corpo do método.

Evite a má prática do uso de try-catch como um if. Apesar que, nem sempre é simples fazer isso como em caso de parses de String para algum tipo numérico (precisaria testar através de regex).

Criado 21 de dezembro de 2010
Ultima resposta 21 de dez. de 2010
Respostas 16
Participantes 6