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

[Projeto] Desafio Prompt Bancário

Aqui minha versão do desafio. Suiei muito a camisa pra deixar o mais funcional possível mas acredito ter feito um bom trabalho depois de ter lido bastante a documentação do Java.

import java.util.Scanner;

public class Desafio {
    static String endingMessage= "O Banco Imaginário Agradece. Tenha um bom dia!";
    public static String menu = """
            O que deseja fazer hoje?
            1 - Verificar Saldo
            2 - Fazer Depósito
            3 - Fazer Retirada
            4 - Sair
            """;
    static String currentBalanceMessage = "Seu saldo atual é de %.2f";
    static Scanner input = new Scanner(System.in);
    static int operationNumber = 0;
    static float accountBalance = 2500;
    static String errorMessage = "Opção inválida. Tente outra vez";
    public static boolean continueOperations = true;

    public static boolean newOperationCheck(boolean j) {
        j = true;
        System.out.println(continueOperations);
        while (continueOperations) {
            System.out.println("""
                    Deseja realizar mais alguma operação?\n
                    1 - Sim
                    2 - Não
                    """);
            int i = input.nextInt();
            switch (i) {
                case 1:
                    getOperationNumber();
                    break;
                case 2:
                    System.out.println(endingMessage);
                    j = false;
                    continueOperations = false;
                    break;
                default:
                    System.out.println(errorMessage);
            }
        }
        return j;
    }
    public static boolean loop(boolean i) {
        i = true;
        switch (operationNumber) {
            case 1:
                System.out.println(currentBalanceMessage.formatted(accountBalance) + "\n");
                newOperationCheck(i);
                break;
            case 2:
                System.out.println("Informe o valor a ser depositado:\n");
                int addBalance;
                addBalance = input.nextInt();
                accountBalance += addBalance;
                System.out.println(currentBalanceMessage.formatted(accountBalance));
                newOperationCheck(i);
                break;
            case 3:
                System.out.println("Informe o valor a ser retirado:\n");
                int subBalance;
                subBalance = input.nextInt();
                while (subBalance > accountBalance) {
                    System.out.println("Valor não disponível. Tente outro valor");
                    System.out.println("Informe o valor a ser retirado:\n");
                    subBalance = input.nextInt();
                }
                accountBalance -= subBalance;
                System.out.println(currentBalanceMessage.formatted(accountBalance));
                newOperationCheck(i);
                break;
            case 4:
                System.out.println(endingMessage);
                break;
            default:
                operationNumber = 0;
                System.out.println(errorMessage + "\n");
                System.out.println(menu);
                operationNumber = input.nextInt();
                getOperationNumber();
                break;
        }
        return i;
    }
    public static void getOperationNumber() {
        while (continueOperations) {
            System.out.println(menu);
            operationNumber = input.nextInt();
            loop(continueOperations);
            break;
        }
    }

    public static void main(String[] args) {
        String costumerName = "Clark Kent";
        String accountType = "Conta Corrente";
        String welcomeMessage = """
            *****************************
            Bem vindo ao Banco Imaginário
            Nome do Cliente: %s
            Tipo de Conta: %s
            Saldo atual da Conta: %.2f
            *****************************
            """.formatted(costumerName, accountType, accountBalance);

        System.out.println(welcomeMessage);
        getOperationNumber();
        }
    }

Aberto a críticas de como posso deixar o código mais limpo ou enxuto (apesar de que dei meu melhor pra deixá-lo bem enxuto já como está). Agradeço a todos pelos insights desde já!

1 resposta
solução!

Olá Lucas, parabéns pelo seu esforço em criar uma aplicação funcional! É muito legal ver que você se dedicou a estudar a documentação do Java para desenvolver o desafio.

Quanto à sua pergunta, uma sugestão para deixar o código mais limpo seria utilizar constantes para os valores fixos, como por exemplo, o número de opções do menu e a mensagem de erro para opções inválidas. Isso deixaria o código mais fácil de ser mantido e alterado no futuro.

Outra sugestão seria utilizar uma estrutura de repetição para evitar a repetição de código na função newOperationCheck(), que é chamada tanto no caso 1 quanto no caso 2 do switch-case da função loop().

Por fim, uma dica para deixar o código mais legível seria utilizar nomes mais descritivos para as variáveis, como por exemplo, customerName em vez de costumerName.

Espero ter ajudado e bons estudos!