Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Erro de lógica ao exibir msg "Saldo Insuficiente"

Amigos, nos testes dos códigos abaixo, estou recebendo uma saída errada, onde só deveria exibir mensagem de saldo insuficiente se o valor do saque fosse maior que o saldo:

package br.com.alura.banco;
public class Conta {
    String titular;
    int numero;
    int agencia;
    double saldo;

    void deposita(double valorASerDepositado) {
        this.saldo += valorASerDepositado;
    }
    void saca(double valorASerSacado) {
        if (this.saldo >= valorASerSacado);
            this.saldo -= valorASerSacado;
            System.out.println("Operação não realizada. Saldo Insuficiente!!!");
    }
}

------------------------------------------------------------------------------------

package br.com.alura.banco;
public class Programa {  
    public static void main(String[] args) {
        Conta mauricio =new Conta();
        mauricio.numero = 123;
        mauricio.agencia = 222;
        mauricio.titular = "Mauricio";
        mauricio.saldo = 0.0;

        System.out.println("Saldo Antes: " );
        Conta guilherme =new Conta();
        guilherme.numero = 127;
        guilherme.agencia = 224;
        guilherme.titular = "Guilherme";
        guilherme.saldo = 0.0;

        System.out.println("Saldo " + mauricio.titular + " : " + mauricio.saldo);
        System.out.println("Saldo " + guilherme.titular + ": " + guilherme.saldo);
        System.out.println(" " );

        mauricio.deposita(1000);
        guilherme.deposita(500);
        mauricio.saca(501);
        guilherme.saca(1);

        System.out.println("Saldo Depois: " );

        System.out.println("Saldo " + mauricio.titular + " : " + mauricio.saldo);
        System.out.println("Saldo " + guilherme.titular + ": " + guilherme.saldo);

    }
}

-----------------------------------------------------------------------------------------

saida:

Saldo Antes: 
Saldo Mauricio : 0.0
Saldo Guilherme: 0.0

Operação não realizada. Saldo Insuficiente!!!
Operação não realizada. Saldo Insuficiente!!!
Saldo Depois: 
Saldo Mauricio : 499.0
Saldo Guilherme: 499.0

Abs

5 respostas

Oi Fernando, tudo bom?

Acredito que o problema esteja na implementação desse metodo aqui:

void saca(double valorASerSacado) {
        if (this.saldo >= valorASerSacado);
            this.saldo -= valorASerSacado;
            System.out.println("Operação não realizada. Saldo Insuficiente!!!");
    }

Repara que nossa verificação é, se o saldo for maior ou igual ao valor a ser sacado, a gente entra no bloco. O que faz todo sentido, já que a gente sempre quer sacar apenas se o saldo for maior que o valor.

Entretanto, dentro do bloco a gente realiza o saque (subtrai o valor do saldo) e imprime na tela "Operação não realizada...".

Ou seja, estamos realizando o saque e falando que não realizamos!

Acredito que algo mais coerente seria parecido com:

void saca(double valorASerSacado) {
        if (this.saldo >= valorASerSacado);
            this.saldo -= valorASerSacado;
    } else {
            System.out.println("Operação não realizada. Saldo Insuficiente!!!");
    }

Assim, se o saldo for maior que o valor, realizamos o saque, se não, imprimimos nossa menssagem na tela =)

André, já havia tentado com o else, mas ele pede para deletar este token:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:

Syntax error on token "else", delete this token at Conta.(Conta.java:14) at Programa.main(Programa.java:5)

solução!

Oi Fernando, tudo bom?

A resposta do André está certa, só houve um errinho de sintaxe, você pode fazer de duas maneiras:

void saca(double valorASerSacado) {
        if (this.saldo >= valorASerSacado) {
            this.saldo -= valorASerSacado;
        } else {
            System.out.println("Operação não realizada. Saldo Insuficiente!!!");
        }
    }

ou

void saca(double valorASerSacado) {
        if (this.saldo >= valorASerSacado)
            this.saldo -= valorASerSacado;
        else
            System.out.println("Operação não realizada. Saldo Insuficiente!!!");
    }

Eu particularmente prefiro a primeira opção.

André

Inverti a ordem do If, executando primeiro a lógica do saldo menor que o valor a ser sacado, imprimindo "Saldo Insuficiente":

void saca(double valorASerSacado){

if(this.saldo<valorASerSacado) {

void saca(double valorASerSacado) {
    if(this.saldo<valorASerSacado) {
        System.out.println(this.titular + ", Saldo insuficiente. Saque de R$ " 
                            + valorASerSacado + " Não realizado. "); }
    else { 
    this.saldo -= valorASerSacado;
}
}

Tentei tratar com um try/catch e exception mas não deu certo.

Essa é a dificuldade do Java: quando usar uma opção ou outra.

Abs

Luis Gustavo, deu certinho. Agradeço seu auxilio e do André. O importante, além de fazer o código funcionar, é entender que um IF, pede uma abertura de chaves para entrar num bloco de decisão. Não erro mais rsss ;-)

Abraços

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software