1
resposta

[Dúvida] Projeto do Banco

Conclui o código. Tem um problema no case 3 que não consegui resolver que o programa pergunta para o usuario duas vezes qual valor deve sacar... :(

 import java.util.Random;
 import java.util.Scanner;


    public class Main {
    public static void main(String[] args) {
    Scanner teclado = new Scanner(System.in);
    Random gerador = new Random();
    String nomeCliente, tipoConta;
    Double saldoInicial;

    System.out.println("Informe seu Nome :");
    nomeCliente = teclado.nextLine();
    System.out.println("\nInforme o tipo da sua conta: (Corrente/Poupança)");
    tipoConta = teclado.nextLine();
    saldoInicial = gerador.nextDouble(1000.00, 10000.99);

    ExibirMenu(nomeCliente, tipoConta, saldoInicial);
    Operacao(teclado, saldoInicial);

    teclado.close();

}
public static void ExibirMenu(String nomeCliente, String tipoConta, double saldoInicial){

    System.out.println("""
            ***********************
            Dados iniciais do cliente:

            Nome: %s
            Tipo da Conta: %s
            Saldo da Conta: R$ %.2f

            ***********************
            """.formatted(nomeCliente, tipoConta,saldoInicial));
}
public static void Operacao(Scanner teclado, double saldoInicial){
    int opcao;
    boolean condicao=true;
    double deposito, saque;

    System.out.println("""
            Operações

            1- Consultar saldos
            2- Receber valor
            3- Transferir valor
            4- Sair

            Digite a opção desejada:""");

    while (condicao){
        opcao = teclado.nextInt();
        while (opcao >= 1 && opcao <=4) {
            switch (opcao){
                case 1:
                    System.out.println("Saldo Atual da conta: " + String.format("%.2f", saldoInicial));
                    System.out.println("Selecione outra opção, caso queira sair digite 4 : ");
                    opcao=teclado.nextInt();

                    break;
                case 2:
                    System.out.println("Qual valor deseja depositar ?");
                    deposito=teclado.nextDouble();
                    saldoInicial += deposito;
                    System.out.println("\nSaldo Atual : R$" + String.format("%.2f",saldoInicial ));

                    System.out.println("\nDigite 2 caso queira depositar mais dinheiro");
                    System.out.println("Selecione outra opção, caso queira sair digite 4 : ");
                    opcao=teclado.nextInt();
                    break;
                case 3:
                    System.out.println("Informe o valor que queira sacar :");
                    saque=teclado.nextDouble();
                    if(saque < saldoInicial){
                        saldoInicial -= saque;
                        System.out.println("\nSaldo Atual : R$" + String.format("%.2f", saldoInicial));
                        System.out.println("\nDigite 3 caso queira sacar mais dinheiro");
                        System.out.println("Selecione outra opção, caso queira sair digite 4 : ");
                        opcao = teclado.nextInt();
                    }else {
                        while (saque >saldoInicial){
                            System.out.println("Saldo Insufiente !");
                            System.out.println("Digite o valor que queira sacar novamente !: ");
                            saque=teclado.nextDouble();
                        }
                    }
                    break;

                case 4:
                    System.out.println("Adeus, Obrigado por usar nosso banco !");
                    condicao = false;
                    break;
            }
        }
        System.out.println("""
        Opção invalida \n Digite Outra opção""");
        opcao= teclado.nextInt();



    }

}

}

1 resposta

é porque você está mantendo a opção como 3, aí ele ja reenicia o loop com o valor 3 chama o mesmo case de novo sem perguntar, uma correção seria:

                    case 3:
                        System.out.println("Informe o valor que queira sacar :");
                        saque = teclado.nextDouble();
                        if (saque < saldoInicial) {
                            saldoInicial -= saque;
                        } else {
                            while (saque > saldoInicial) {
                                System.out.println("Saldo Insufiente !");
                                System.out.println("Digite o valor que queira sacar novamente !: ");
                                saque = teclado.nextDouble();
                            }
                        }
                        System.out.println("\nSaldo Atual : R$" + String.format("%.2f", saldoInicial));
                        System.out.println("\nDigite 3 caso queira sacar mais dinheiro");
                        System.out.println("Selecione outra opção, caso queira sair digite 4 : ");
                        opcao = teclado.nextInt();
                        break;

assim vc garante que ele pergunte independente de entrar na condição ou não.

aconselho tbm a usar apenas um while em vez de 2 para validar as opções, aí nesse caso, você so precisaria pedir a opção no início no while segue exemplo:

    public static void Operacao(Scanner teclado, double saldoInicial) {
        int opcao;
        boolean condicao = true;
        double deposito, saque;

        System.out.println("""
                Operações

                1- Consultar saldos
                2- Receber valor
                3- Transferir valor
                4- Sair

                Digite a opção desejada:""");

        while (condicao) {
            opcao = teclado.nextInt();
            switch (opcao) {
                case 1:
                    System.out.println("Saldo Atual da conta: " + String.format("%.2f", saldoInicial));
                    System.out.println("Selecione outra opção, caso queira sair digite 4 : ");

                    break;
                case 2:
                    System.out.println("Qual valor deseja depositar ?");
                    deposito = teclado.nextDouble();
                    saldoInicial += deposito;
                    System.out.println("\nSaldo Atual : R$" + String.format("%.2f", saldoInicial));

                    System.out.println("\nDigite 2 caso queira depositar mais dinheiro");
                    System.out.println("Selecione outra opção, caso queira sair digite 4 : ");
                    break;
                case 3:
                    System.out.println("Informe o valor que queira sacar :");
                    saque = teclado.nextDouble();
                    if (saque < saldoInicial) {
                        saldoInicial -= saque;
                    } else {
                        while (saque > saldoInicial) {
                            System.out.println("Saldo Insufiente !");
                            System.out.println("Digite o valor que queira sacar novamente !: ");
                            saque = teclado.nextDouble();
                        }
                    }
                    System.out.println("\nSaldo Atual : R$" + String.format("%.2f", saldoInicial));
                    System.out.println("\nDigite 3 caso queira sacar mais dinheiro");
                    System.out.println("Selecione outra opção, caso queira sair digite 4 : ");
                    break;

                case 4:
                    System.out.println("Adeus, Obrigado por usar nosso banco !");
                    condicao = false;
                    break;

                default:
                    System.out.println("""
                            Opção invalida \n Digite Outra opção""");
            }
        }
    }