1
resposta

Projeto conta

// LOGIN CONTA
        String nome = "Alain";
        int senha = 15012026;
        boolean loginConcreto = false;
        Scanner leitor = new Scanner(System.in);

        System.out.println("\n*****BANCO DE PORTUGAL*****");
        System.out.println("    Informe seus dados");

        while (!loginConcreto) {
            System.out.println("1 - Digite seu nome: ");
            String dadoDigitado = leitor.nextLine();

            if (dadoDigitado.equalsIgnoreCase(nome)) {
                System.out.println("2 - Digite a senha: ");

                int senhaDigitada = leitor.nextInt();
                leitor.nextLine();

                if (senhaDigitada == senha) {
                    System.out.println("Seja Bem vindo " + nome);
                    loginConcreto = true;
                } else {
                    System.out.println(" Senha errada, tente novamente!");
                }
            } else {
                System.out.println("Nome errado, tente novamente!");
            }
        }

        // EXTRATO DA CONTA
        String tipoConta = "Corrente";
        double saldo = 2500;
        double receberValor = 0;
        double transferirValor = 0;

        System.out.println("\n************************************");
        System.out.println("Dados iniciais do cliente");
        System.out.println("Nome: " + nome);
        System.out.println("Tipo de Conta: " + tipoConta);
        System.out.println("Saldo Disponivel: " + saldo + " Reais");
        System.out.println("\n*************************************");

        //MENU OPCAO
        int opcao = 0;

        while (opcao != 4) {
            System.out.println("Menu Opcoes");
            System.out.println("""
                    1 - Consultar saldos
                    2 - Receber valor
                    3 - Transferir valor
                    4 - Sair
                    
                    Digite a opcao:
                    """);

            opcao = leitor.nextInt();

            switch (opcao) {
                case 1:
                    System.out.println(" Seu saldo e: " + saldo + " Reais");
                    break;
                case 2:
                    System.out.println("Digite o valor: ");
                    receberValor = leitor.nextDouble();
                    if (receberValor >= 1) {
                        System.out.println(" A solicitacao foi enviada: " + receberValor + " Reais");
                        saldo += receberValor;
                        System.out.println("Saldo atual e de:" + saldo + " Reais");
                        break;
                    }
                    while (receberValor < 1) {
                        System.out.println("Valor minimo nao atingido!");
                        System.out.println("Digite o valor: ");
                        receberValor = leitor.nextDouble();
                    }
                case 3:
                    System.out.println("Digite o valor: ");
                    transferirValor = leitor.nextDouble();
                    if (transferirValor <= saldo) {
                        System.out.println(" Transferir valor: " + transferirValor + " Reais");
                        System.out.println(" Saldo atualizado: " + (saldo - transferirValor) + " Reais");
                        saldo -= receberValor;
                        System.out.println("Saldo atual e de:" + saldo + " Reais");
                        break;
                    } else {
                        System.out.println("Saldo insuficiente");
                        System.out.println("Saldo atual: " + saldo + " Reais");
                    }
                    break;
                case 4:
                    System.out.println(" Saindo....");
                    break;
                default:
                    System.out.println("Valor incorreto! " +
                            "tente de 1 a 4");
            }
        }

    }

}
1 resposta

Oii, Yanarha! Tudo bem?

Fiquei muito feliz em ver o seu empenho. Você não só resolveu o desafio proposto, como foi além e implementou um sistema de Login e ainda utilizou o switch case para o menu. Essa curiosidade em explorar novas estruturas e criar funcionalidades extras é o que faz a gente evoluir na programação. Parabéns!

Analisando o seu código, notei dois detalhes importantes na lógica das operações bancárias que valem a sua atenção para o programa funcionar perfeitamente:

1. A subtração na transferência (case 3)
Dentro do case 3, na linha onde você atualiza o saldo, você utilizou a variável receberValor em vez de transferirValor. Isso faria o saldo ser descontado pelo valor errado.

  • Como está: saldo -= receberValor;
  • Correção: saldo -= transferirValor;

2. O fluxo do "Receber Valor" (case 2)
Aqui temos um detalhe sutil! Se o usuário digitar um valor válido de primeira (maior que 1), o seu código funciona e usa o break. Porém, se ele digitar um valor inválido e entrar no while:

  1. O valor não tá sendo somado ao saldo após sair do loop.
  2. Como não há um break logo após o fechamento do while, o código executa o case 2 e "cai" direto executando o case 3 também (chamamos isso de fall-through).

Pra corrigir, você pode simplificar a lógica garantindo que a soma e o break aconteçam em qualquer cenário. Exemplo:

case 2:
    System.out.println("Digite o valor a receber: ");
    receberValor = leitor.nextDouble();

    // garante que o valor seja válido
    while (receberValor < 1) {
        System.out.println("Valor mínimo não atingido! Digite novamente:");
        receberValor = leitor.nextDouble();
    }
    
    // só chega aqui se o valor for válido
    saldo += receberValor;
    System.out.println("Saldo atual é de: " + saldo + " Reais");
    break; // o break fica aqui fora para garantir a saída do switch

Continue com essa dedicação e explorando novas funcionalidades, está no caminho certo.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!