Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Projeto final

Abaixo minha resolução para criação do sistema bancário, optei por utilizar switch case, porém tive problemas com a variável saldo que não estava sendo salva quando usava o main(args), portanto transformei ela em uma variável global, desta maneira o dado é extraído fora da main e consegue ser alterado do valor original.

package Exercicios.Aula4_Projeto;

import java.util.Scanner;

public class Desafio {
    private static double saldo = 3500.00; // Declaração de Global para assegurar alterações

    public static void main(String[] args) {
        Scanner leitura = new Scanner(System.in);
        String nomeCliente = "Gabriel Marçal";
        String tipoConta = "Conta Corrente";

        // Inicializar dados do cliente
        System.out.println(String.format("""
                ******************************
                
                Dados do cliente
                
                Nome: %s
                Conta: %s
                Saldo: %.2f
                ******************************""", nomeCliente, tipoConta, saldo));
        
        // Menu opções
        System.out.println("""
                
                Operações
                
                1 - Consultar Saldo
                2 - Confirmar Recebimento
                3 - Transferir Valor
                4 - Sair""");

        System.out.println("Digite a opção desejada: ");
        int opcao = leitura.nextInt();

        switch (opcao) {
            case 1:
                // Visualização do saldo
                System.out.println("Saldo: " + saldo);
                main(args); // Retornar ao menu
                
            case 2:
                // Recebe valor
                System.out.println("Confirme o valor recebido: ");
                double valorRecebido = leitura.nextDouble();
                saldo += valorRecebido;
                System.out.println("Novo Saldo: " + saldo);
                main(args); // Retornar ao menu
                
            case 3:
                // Envia valor
                System.out.println("Informe o valor que pretende transferir:");
                double valorTransferido = leitura.nextDouble();
                if (valorTransferido > saldo) {
                    System.out.println("Saldo insuficiente!");
                } else {
                    saldo -= valorTransferido;
                    System.out.println("Novo Saldo: " + saldo);
                }
                main(args); // Retornar ao menu
                
            case 4:
                System.out.println("Agradecemos pela sua visita!");
                System.exit(0); // Encerrar o programa;
                
            default:
                System.out.println("Opção inválida");
                main(args); // Retornar ao menu;
        }
    }
}
1 resposta
solução!

Oi Gabriel,

Excelente trabalho na criação do seu sistema bancário! 👍

A utilização do switch case para o menu de opções ficou bem organizada e clara.

A iniciativa de usar uma variável global para o saldo resolveu o problema de persistência dos dados entre as operações, o que é muito bom.

A chamada recursiva do método main dentro dos cases do switch pode levar a um consumo excessivo de memória, pois cada chamada adiciona um novo frame na pilha de execução.

Uma alternativa mais eficiente seria usar um loop while para manter o menu em execução até que o usuário escolha sair.

Aqui está um exemplo de como você pode refatorar seu código para usar um loop while:

package Exercicios.Aula4_Projeto;

import java.util.Scanner;

public class Desafio {
    private static double saldo = 3500.00;

    public static void main(String[] args) {
        Scanner leitura = new Scanner(System.in);
        String nomeCliente = "Gabriel Marçal";
        String tipoConta = "Conta Corrente";
        int opcao;

        System.out.println(String.format("""
                ******************************
                
                Dados do cliente
                
                Nome: %s
                Conta: %s
                Saldo: %.2f
                ******************************""", nomeCliente, tipoConta, saldo));

        while (true) {
            System.out.println("""
                    
                    Operações
                    
                    1 - Consultar Saldo
                    2 - Confirmar Recebimento
                    3 - Transferir Valor
                    4 - Sair""");

            System.out.print("Digite a opção desejada: ");
            opcao = leitura.nextInt();

            switch (opcao) {
                case 1:
                    System.out.println("Saldo: " + saldo);
                    break;
                case 2:
                    System.out.print("Confirme o valor recebido: ");
                    double valorRecebido = leitura.nextDouble();
                    saldo += valorRecebido;
                    System.out.println("Novo Saldo: " + saldo);
                    break;
                case 3:
                    System.out.print("Informe o valor que pretende transferir: ");
                    double valorTransferido = leitura.nextDouble();
                    if (valorTransferido > saldo) {
                        System.out.println("Saldo insuficiente!");
                    } else {
                        saldo -= valorTransferido;
                        System.out.println("Novo Saldo: " + saldo);
                    }
                    break;
                case 4:
                    System.out.println("Agradecemos pela sua visita!");
                    System.exit(0);
                default:
                    System.out.println("Opção inválida");
            }
        }
    }
}

Neste exemplo, o loop while(true) garante que o menu seja exibido repetidamente até que o usuário escolha a opção 4 para sair.

O uso do break dentro de cada case impede que o código continue executando os próximos casos após a execução do caso correspondente. 🤔

🤓 Para saber mais: Estruturas de controle em Java

Continue praticando e explorando novas funcionalidades! 💪