Ajuda calcular saque e deposito [RESOLVIDO]

Bom dia C:

Tem um exemplo aqui que pede o seguinte:

Vou receber um valor de uma ctValor, vou ter um ComboBox com Saque e deposito, outro ctSaldo para o resultado e um botão para calcular o evento.

No meu código criei a classe Banco que vai calcular o Saque e o deposito:


public class Banco {

    double efetuarDeposito(double valor, double saldo) {

    saldo+= valor;

    return saldo;

    }
   
    double efetuarSaque(double valor, double saldo) {

       saldo-= valor;

        return saldo;

    }

}

E aqui o evento do botão que vai calcular o Deposito e o Saque:


private void btCalcularActionPerformed(java.awt.event.ActionEvent evt) {                                           

        double valor;
        double saldo = 10;

       valor = Double.parseDouble(ctValor.getText());

       Banco banco = new Banco();
     
       if (cbOperacao.getSelectedIndex() == 0) {

        }

        if (cbOperacao.getSelectedIndex() == 1) {

        saldo = Double.parseDouble(ctSaldo.getText());
        ctSaldo.setText((String.valueOf(banco.efetuarDeposito(valor, saldo))));
 
        }

        if (cbOperacao.getSelectedIndex() == 2) {

        saldo = Double.parseDouble(ctSaldo.getText());
        ctSaldo.setText((String.valueOf(banco.efetuarSaque(valor, saldo))));
            
        }
              
    }        
         

Quando eu realizar o deposito o saldo tem que ficar armazenado no ctSaldo, para depois se eu quiser realizar um saque ele tirar do saldo.

O problema é, quando eu realizo o deposito ou o saque acontece esse error:


Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String
        at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:994)
        at java.lang.Double.parseDouble(Double.java:510)
        at pacBanco.FormBanco.btCalcularActionPerformed(FormBanco.java:146)
        at pacBanco.FormBanco.access$200(FormBanco.java:18)
        at pacBanco.FormBanco$3.actionPerformed(FormBanco.java:63)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
        at java.awt.Component.processMouseEvent(Component.java:6267)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6032)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

[]'s

Vander Carlos, bom dia.

O problema acontece quando você tenta fazer o parseDouble.

Olhando o erro no StackTrace o ctValor.getText() ou o ctSaldo.getText() está vazio e por isso está dando erro na hora de converter para double. Tente verificar antes se está vazio e se estiver passe 0.

Abraços,
Pedro.

Pedro, no início eu iniciei os dois valores, mas continuou o mesmo erro;

double valor = 1;
double saldo = 1;

Vander Carlos,

o problema é no ctValor.getText() ou no ctSaldo.getText().

Quando você chama o getText ele está retornando uma String vazia. Quando você pega essa String vazia e tenta fazer o parseDouble dá um erro de NumberFormatException pois o “” não é número.

Verifica se o valor retornado no getText é diferente de vazio. Se for vazio então você passa o valor 0 para a sua variável.

Abraços,
Pedro.

Bom fiz isso:


if ((ctValor.getText().isEmpty())){

    valor = Double.parseDouble(ctValor.getText());
}

Dessa forma ele atribuindo o deposito, mais por exemplo tenho 100 depositado, mas quando faço um saque de 20 ele atribui -20 ao saldo.

Vander Carlos,

faça uma alteração no trecho:

if ((ctValor.getText().isEmpty())){  
    valor = Double.parseDouble(ctValor.getText());  
}  

para

if (!ctValor.getText().isEmpty()){  
    valor = Double.parseDouble(ctValor.getText());  
}  else {
    valor = 0;
}

O problema de estar atribuindo -20 deve estar no método efetuarSaque.

Abraços,
Pedro.

Bom, só fiz uma alteração:

[code]if (!ctSaldo.getText().isEmpty()){

        saldo = Double.parseDouble(ctSaldo.getText());

    }  else {

        saldo = 0;

    }

[/code]

Deu certinho aqui.

Pedro vlw pela atenção, pessoas como você por aqui são poucas.

[]'s

Legal Vander Carlos, que bom que funcionou.

Fico feliz em ter conseguido ajudar.

Abraços,
Pedro.