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…