AJUDA ! Não sei por a lógica do programa não funciona , codigo esta compiliando certo, mas só o deposito funciona!

Boa Noite ! Não sei porque a Lógica do Programa não funciona , o programa compila sem erros mas só consigo fazer o Deposito, o resto das operações não funcionam são ignoradas e o programa então finaliza, o que pode ser ? Obrigado !

package co.javabank.bank;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Javabank {

    public static void main(String[] args) {
        Scanner entradados = new Scanner(System.in);

        Contabank contabank = new Contabank("0001", "1234", "JAVABANK");
        // D =  DEPOSITAR
        // S =  SACAR
        // E =  SAIR
        //String operacoes=null;
        double valor = 0;
        String operacoes = null;
        while (true) {
            try {
                System.out.println("O que deseja fazer ? D = Deposito , S = Saque, E = Sair da Conta");
                operacoes = entradados.nextLine();
                if (operacoes.equals("D")){
                    System.out.println("Qual valor deseja depositar ?");
                valor = entradados.nextDouble();
                contabank.depositar(valor);
            }else {
                    if (operacoes.equals("S")) {
                        System.out.println("QUAL VALOR DESEJA SACAR");
                        valor = entradados.nextDouble();

                    } else {

                        if (!contabank.sacar(valor)) {
                            System.out.println("ONps ! fOI POSSOIVEL SAQUE !" + valor);
                        } else {
                        }
                        if (operacoes.equals("E")) {
                            System.out.println("PROGRAMA FINALIZADO !");
                            System.exit(1);
                        } else
                            System.out.println("Comando inválido Tente novamdnte");
                    }
                }
            } catch (InputMismatchException InputMismatchException) {
            }
            break;
        }
    }
}

Cara, suas classulas IF e ELSE estão bem confusas. Uma dica é colocar um BREAKPOINT em cada classula rodar em modo debug e ir debugando para entender melhor pq não está caindo na classula que você deseja. Uma outra dica é leia sobre Tell, Don’t Ask.

Se você organizar os IF e ELSE você provavelmente vai conseguir algo mais o menos parecido com isso

        try {
            System.out.println("O que deseja fazer ? D = Deposito , S = Saque, E = Sair da Conta");
            operacoes = entradados.nextLine();
            if (operacoes.equals("D")) {
                System.out.println("Qual valor deseja depositar ?");
                valor = entradados.nextDouble();
                contabank.depositar(valor);
            } else if (operacoes.equals("S")) {
                System.out.println("QUAL VALOR DESEJA SACAR");
                valor = entradados.nextDouble();
            } else if (!contabank.sacar(valor)) {
                System.out.println("ONps ! fOI POSSOIVEL SAQUE !" + valor);
            } else if (operacoes.equals("E")) {
                System.out.println("PROGRAMA FINALIZADO !");
                System.exit(1);
            } else {
                System.out.println("Comando inválido Tente novamdnte");
            }
        }

Uma outra dica é partindo do principrio de coesão, podemos extrair essa regra de comparação em uma classe e colocar adicionar toda a lógica de comparação nela. Com isso você vai conseguir simplificar seu código atual e vai entender melhor o que você procura.
Por exemplo:

public boolean DecideOperacao(String operacao) {
    if (operacoes.equals(operacao)) {
        return true;
    }
    return false;
}

Nos meus testes os comando D e E funcionaram.

Já o comando S não funcionou porque vc fez isto:

if (operacoes.equals("S")) {
  System.out.println("QUAL VALOR DESEJA SACAR");
  valor = entradados.nextDouble();
} else {
  if (!contabank.sacar(valor)) {
    System.out.println("ONps ! fOI POSSOIVEL SAQUE !" + valor);
  } else {
  }

  if (operacoes.equals("E")) {
    System.out.println("PROGRAMA FINALIZADO !");
    System.exit(1);
  } else
    System.out.println("Comando inválido Tente novamdnte");
}

Mas deveria ter feito isto:

if (operacoes.equals("S")) {
  System.out.println("QUAL VALOR DESEJA SACAR");
  valor = entradados.nextDouble();
  if (!contabank.sacar(valor)) {
    System.out.println("ONps ! fOI POSSOIVEL SAQUE !" + valor);
  } else {
    System.out.println("O saque ocorreu com sucesso!");
  }
} else {
  if (operacoes.equals("E")) {
    System.out.println("PROGRAMA FINALIZADO !");
    System.exit(1);
  } else
    System.out.println("Comando inválido Tente novamdnte");
}

widomiciano !
Eu vou testar ! aqui o seu exemplo ! pra ver se passa, valeu !

Tranquilo , aqui seria quebrar em testes menores, vou ver melhor esse técnica !

public boolean DecideOperacao(String operacao) {
    if (operacoes.equals(operacao)) {
        return true;
    }
    return false;
}
1 curtida

Sempre que você tem algo assim:

if (condicao) {
    return true;
}
return false;

Pode trocar para return condicao.

Afinal, o resultado do método equals é um valor booleano (ou seja, é true ou false), então seu método poderia ser simplesmente:

public boolean decideOperacao(String operacao) {
    return operacoes.equals(operacao);
}

Também mudei o nome para começar com “d” minúsculo, deixando-o aderente às convenções de nomenclatura da linguagem.

1 curtida

Boa , vou refazer por aqui , obrigado !

Também mudei o nome para começar com “d” minúsculo, deixando-o aderente às convenções de nomenclatura da linguagem.

Isso, veja um pouco sobre testes unitários. Isso vai ajudar muito você a entender o problema ver onse seu código está quebrando e etc…