Tratamento de Exceção

17 respostas
R

Boa tarde a todos,

Alguém pode me ajudar com essa questão:

Implemente uma classe Conta. Esta classe deve ter como atributo interno a informação
sobre o saldo da Conta (considere um valor double), o nome do proprietário da conta.
Implemente, um método depositar, um método s :smiley: acar, um método para informar o saldo atual e
demais métodos que julgar necessários. Garanta, utilizando mecanismo de exceção, que não será
depositado um valor negativo na conta para depósito, utilizando a exceção
IllegalArgumentException. Já para o método sacar, garanta que não seja retirado um valor além do
limite da conta com EstouroDeLimiteException e, também, que não seja informado um saque
negativo, utilizando a IllegalArgumentException.
Crie um classe principal e no main crie um objeto da classe ContaBancaria solicite ao
usuário o nome do correntista e realize um depósito inicial.
Depois, enquanto o usuário desejar, solicite qual operação ele deseja realizar (depósito, saque,
saldo ou sair). Realize o tratamento de exceções correspondente a cada operação realizada.

17 Respostas

renamed

Poste ai o q vc ja fez q geral ajuda

R
public class Conta<EstouroDeLimiteException> {

	String nome;
	double saldo;

	public double depositar(double valor) {



		try{
			if(valor>0){
			valor += saldo;
			}
		}catch(IllegalArgumentException e){

			System.out.println("Não é permitido números negativos!");
		}
		return valor;

	}

	public boolean sacar(double valor) throws Exception{



		if(valor>saldo){
			EstouroDeLimiteException erro =
				 (EstouroDeLimiteException) "Saldo insuficiente!";
			throw (Exception) erro;
		}

		try{
			if(valor>0){
				valor -= saldo;
			}
		}catch(IllegalArgumentException a){
			System.out.println("Não é permitido saque negativo!");
		}
		return true;
	}

	public void informarSaldo(){

		System.out.println("O saldo atual é " + saldo);

	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public double getSaldo() {
		return saldo;
	}

	public void setSaldo(double saldo) {
		this.saldo = saldo;
	}

}

Classe principal:

import javax.swing.JOptionPane;

public class Sistema {



     ContaBancaria cc = new ContaBancaria();

     public void imprimirMenu() {

       JOptionPane.showMessageDialog(null, "\n\n :: Sistema Bancário :: ");
       JOptionPane.showMessageDialog(null, "0 - Sair");
       JOptionPane.showMessageDialog(null, "1 - Depositar Conta Corrente");
       JOptionPane.showMessageDialog(null, "2 - Sacar Conta Corrente");
       JOptionPane.showMessageDialog(null, "3 - Informar Saldo");


        JOptionPane.showInputDialog("\nDigite sua opcao:");
     }

     public Sistema(double valor) throws Exception {



         while (true) {

             imprimirMenu();






             int opcao;
			switch (opcao) {

             case 0:
                JOptionPane.showMessageDialog(null, "Saindo...");
                 System.exit(0);
                 break;

             case 1:

                 JOptionPane.showInputDialog("Digite o valor do deposito:");

                 cc.depositar(cc.depositar(0));
                 JOptionPane.showInputDialog("Deposito efetuado com sucesso!!!");

                 break;

             case 2:
            	 try{
                 JOptionPane.showInputDialog("Digite o valor do saque :");


                  cc.sacar(valor);
            	 }catch(ClassCastException c){

            	 }


                 break;

             case 3:


                 cc.informarSaldo();
                 break;

             default:
                 System.out.println("Opção invalida!");
                 break;
             }
         }
    }


	}

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
			new Sistema();



}


}
thundercas

Ricardo, faltaram 2 coisas:

  1. Utilize as tags para formatação do código, pois bagunçado deste jeito 10% das pessoas que acessarem o tópico terão paciência de ler;
  2. Ainda não ficou clara a sua dúvida. Você não está achando que alguém vai pegar o código do jeito que está, implementar tudo o que está faltando e te enviar, certo???
R

Como faço para utilizar as tags de formatação?

A questão é a seguinte:

Não estou conseguindo chamar os métodos corretamente. Sempre estar dando erro.

nel

Boa tarde.

Então Ricardo, leia este tópico:

http://www.guj.com.br/posts/list/50115.java

Ele explica como deve postar seu código corretamente, da forma como está fica bem complicado.
Poste seu código juntamente com o stack trace ok?

Abraços.

R

Consegui formatar o código… :smiley:

Agora ainda não estou conseguindo acessar os métodos das exceções corretamente.
E a variável opção da classe principal estar dando erro, pois pede para inicializar a variável, porém quando a inicializo
atribuindo um valor zero ela não dar acesso ao switch.

thundercas

Ricardo,

Você está utilizando o Switch em uma variável que não foi inicializada… Dê um valor para a variável opção e funcionará.

nel

Isso acontece porque você não atribui nenhum atributo para receber a opção selecionada pelo usuario correto?
Mude o método imprimiMenu() de void para int. Crie uma variavel int dentro deste método que recebe a opção que o usuario digitou e retorne esse valor ao seu método que utiliza o switch. Entendeu?

seria algo assim:

public int imprimirMenu() {
    //seu codigo
   int opc =  JOptionPane.showInputDialog("\nDigite sua opcao:"); 

   return opc;
}

public Sistema(double valor) throws Exception {
  //seu codigo
     int opcao =  imprimirMenu();   
  //resto do seu código

}

Abraços!

R

Certo Thundercas,

Foi feito isso, agora não estou conseguindo chamar os métodos da classe conta corretamente,
tem alguma dica?

marcosvidolin

Voce pode criar as suas próprias exceções, talvez o exercício seja para esse fim. =]
Estudo um pouco de exceções ou exceptions do Java e como são criadas.

thundercas

Ricardo, por que não consegue???

Os métodos são públicos e a variável cc foi inicializada corretamente, deveria funcionar… Qual problema está ocorrendo??

R

Certo nel fiz isso.

Porém, o seguinte techo estar com erro.

return opc;
thundercas

Ricardo, toda vez q der erro, já posta dizendo qual é o erro.

R

O código da classe principal agora estar da seguinte forma:

import javax.swing.JOptionPane;

public class Sistema {



     ContaBancaria cc = new ContaBancaria();

     public int imprimirMenu() {

       JOptionPane.showMessageDialog(null, "\n\n :: Sistema Bancário :: ");
       JOptionPane.showMessageDialog(null, "0 - Sair");
       JOptionPane.showMessageDialog(null, "1 - Depositar Conta Corrente");
       JOptionPane.showMessageDialog(null, "2 - Sacar Conta Corrente");
       JOptionPane.showMessageDialog(null, "3 - Informar Saldo");


       String opc = JOptionPane.showInputDialog("\nDigite sua opcao:");
       
       return opc;
     }

     public Sistema(double valor) throws Exception {



         while (true) {

             int opcao=imprimirMenu();
             
			switch (opcao) {

             case 0:
                JOptionPane.showMessageDialog(null, "Saindo...");
                 System.exit(0);
                 break;

             case 1:

                 JOptionPane.showInputDialog("Digite o valor do deposito:");

                 cc.depositar(cc.depositar());
                 JOptionPane.showInputDialog("Deposito efetuado com sucesso!!!");

                 break;

             case 2:
            	 try{
                 JOptionPane.showInputDialog("Digite o valor do saque :");

                  cc.sacar(opcao);
            	 }catch(ClassCastException c){

            	 }


                 break;

             case 3:


                 cc.informarSaldo();
                 break;

             default:
                 System.out.println("Opção invalida!");
                 break;
             }
         }
    }




	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
			new Sistema();



}

}

E os erros apontados pelo o eclipse são os seguintes:

return opc;

em cc.depositar(cc.depositar());
e em: new Sistema();

WendersonLP

Olha aqui implementei uns métodos que acho que é o que você está querendo.

public void addDeposit(double value) {
		
		if (value < 0)
			throw new IllegalArgumentException("Invalid Deposit!" + "\nValue: " + value);
			
		this.balance += value;
	}
	
	
	public double getBalance() {
		return this.balance;
	}
	
	
	public double withdraw(double value) {
		
		if (value < 0)
			throw new IllegalArgumentException("Invalid withdraw!" + "Value: " + value);
			
		if (this.balance < value)
			throw new BurstOfLimitException();
			
		this.balance -= value;
		
		return value;
	}

Aqui eu criei a classe que lança uma exception caso o valor saque seja maior que o do saldo

public class BurstOfLimitException extends RuntimeException {
	
	public BurstOfLimitException(String exception) {
		super(exception);
	}
	
	public BurstOfLimitException() {
		this("Burst of Limit!");
	}
}

Acho que isso já basta para que você conclua a sua aplicação.

R

Obrigado a todos que colaboraram…

Consegui resolver a questão com a ajuda de um colega.

Até mais.

nel

Boa noite.

Ricardo, você prestou atenção ao erro? Você diz na assinatura do seu método que o tipo de retorno é um int mas tu estás retornando uma string. Veja:
public int imprimirMenu() {   
  
       JOptionPane.showMessageDialog(null, "\n\n :: Sistema Bancário :: ");   
       JOptionPane.showMessageDialog(null, "0 - Sair");   
       JOptionPane.showMessageDialog(null, "1 - Depositar Conta Corrente");   
       JOptionPane.showMessageDialog(null, "2 - Sacar Conta Corrente");   
       JOptionPane.showMessageDialog(null, "3 - Informar Saldo");   
  
       //aqui está o seu errro
       //String opc = JOptionPane.showInputDialog("\nDigite sua opcao:");   
       //comente a linha acima como estou fazendo e altere para:
      int opc = JOptionPane.showInputDialog("\nDigite sua opcao:");
  
       return opc;   
     }

Abraços

Criado 6 de novembro de 2009
Ultima resposta 6 de nov. de 2009
Respostas 17
Participantes 6