Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

{Projeto] Desafio Final - Fiz podendo cadastrar o usuário. (gostaria de dicas para otimização).

import java.util.Scanner;

public class Desafio {

public static void main(String[] args) {
    Scanner nome = new Scanner(System.in);
    Scanner conta = new Scanner(System.in);
    Scanner saldo = new Scanner(System.in);
    Scanner menu = new Scanner(System.in);
    Scanner dinheiro = new Scanner(System.in);
    int verificadorUm = 0;
    int verificadorDois = 0;
    int verificadorTres = 0;
    int verificadorGeral= 0;
    int tipoDeConta = 0;
    int menuOpcoes = 0;
    double saldoCliente = 0;
    String nomeCliente = null;
    String qualConta = null;
    String mensagemCinco = null;
    String mensagemSete = null;
    while (verificadorGeral != 1) {

        while (verificadorUm != 1) {

            System.out.println("Insira o nome do cliente: ");
            nomeCliente = nome.nextLine();
            String mensagemUm = """
                    \nO mome inserido: %s está correto?
                    Digite 1 caso esteja correto.
                    Digite 0 caso não esteja correto\n.
                    """.formatted(nomeCliente);
            System.out.println(mensagemUm);
            Scanner correcaoNome = new Scanner(System.in);
            verificadorUm = correcaoNome.nextInt();
        }

        while (verificadorDois != 1) {

            System.out.println("\nInsira o tipo de conta: ");
            String mensagemDois = """
                    Digite 1 para conta corrente.
                    Digite 0 para donta poupança.\n
                    """.formatted();
            System.out.println(mensagemDois);
            tipoDeConta = conta.nextInt();
            switch (tipoDeConta) {
                case 1:
                    qualConta = "Conta corrente";
                    break;
                case 0:
                    qualConta = "Conta Poupança";
                    break;
            }
            System.out.println("\nTipo da conta: " + tipoDeConta+"\n");
            String mensagemTres= """
                    \nO tipo de conta é: %s 
                    Está correto?
                    Digite 1 caso esteja correto.
                    Digite 0 caso não esteja correto.\n
                    """.formatted(qualConta);
            System.out.println(mensagemTres);
            Scanner correcaoConta = new Scanner(System.in);
            verificadorDois = correcaoConta.nextInt();
        }

        while (verificadorTres != 1) {

            System.out.println("\nInsira o valor depositado: ");
            saldoCliente = saldo.nextDouble();
            String mensagemQuatro = """
                    \nO valor inserido: %.2f está correto?
                    Digite 1 caso esteja correto.
                    Digite 0 caso não esteja correto.\n
                    """.formatted(saldoCliente);
            System.out.println(mensagemQuatro);
            Scanner correcaoValor = new Scanner(System.in);
            verificadorTres =  correcaoValor.nextInt();
        }
             mensagemCinco = """
                    _______________________________________________
                    Nome: %s                                       |
                    Tipo de conta: %s                              |
                    Saldo atual: %.2f                                |
                    _______________________________________________|
                    \n""".formatted(nomeCliente,qualConta,saldoCliente);
            System.out.println(mensagemCinco);

            String mensagemSeis = """
                    Os dados estão corretos?
                    Se estiverem, digite 1.
                    Caso não estejam, digite 0.
                    \n""";
            System.out.println(mensagemSeis);
            Scanner correcaoGeral = new Scanner(System.in);
            verificadorGeral = correcaoGeral.nextInt();
    }
4 respostas
    while (menuOpcoes != 5) {

        String opcoes = """
                \n O que gostaria de fazer\n:
                1 - Saldo.
                2 - Dados cadastrais.
                3 - Retirada.
                4 - Depósito.
                5 - Sair.
                """.formatted();
        System.out.println(opcoes);

        String mensagemSaldoAlteracao = """
                Seu saldo é de : %.2f
                Digite o valor que deseja retirar""".formatted(saldoCliente);

        menuOpcoes = menu.nextInt();

        switch (menuOpcoes) {

            case 1:
                System.out.println(saldoCliente);
                break;

            case 2:
                String mensagemDados = """
                        _______________________________________________
                        Nome: %s                                       |
                        Tipo de conta: %s                              |
                        _______________________________________________|
                        \n""".formatted(nomeCliente, qualConta);
                System.out.println(mensagemDados);
                break;

            case 3:
                if (tipoDeConta == 0) {
                System.out.println(mensagemSaldoAlteracao);
                double tira = dinheiro.nextDouble();
                    while (saldoCliente - tira < 0) {

                        System.out.println("Saldo insuficiente!");
                        System.out.println(mensagemSaldoAlteracao);
                        tira = 0;
                    }
                    saldoCliente = saldoCliente - tira;
                    System.out.println("saldo atual: " + saldoCliente+"\n");
                }
                else if (tipoDeConta == 1) {
                    System.out.println(mensagemSaldoAlteracao);
                    double tira = dinheiro.nextDouble();
                    while (saldoCliente - tira < -1000) {

                        System.out.println("Saldo insuficiente!\n");
                        System.out.println(mensagemSaldoAlteracao);
                        tira = 0;
                    }
                    saldoCliente = saldoCliente - tira;
                    System.out.println("saldo atual: " + saldoCliente);
                }
                break;

            case 4:
                System.out.println(mensagemSaldoAlteracao);
                double adiciona = dinheiro.nextDouble();
                saldoCliente += adiciona;
                System.out.println("Seu saldo atual é de: " + saldoCliente);
                break;
        }
    }

    mensagemSete = """
                    _______________________________________________
                    Nome: %s                                       |
                    Tipo de conta: %s                              |
                    Saldo atual: %.2f                                |
                    _______________________________________________|
                    \n""".formatted(nomeCliente,qualConta,saldoCliente);

    System.out.println(mensagemSete);
    System.out.println("Fim do programa, tenha um bom dia");
}

}

a segunda parte está na resposta acima, pois não coube em uma só mensagem. Gostaria de algumas dicas para fazer de forma mais simplificada e mais fácil de corrigir.

Olá, Yordan.

Como vai?

Muito obrigado por compartilhar o andamento do seu projeto aqui com a gente. Isso mostra que você está de fato praticando e evoluindo. 

Algumas sugestões de melhorias:

Remover Scanners Redundantes:

Você não precisa criar vários objetos Scanner para diferentes variáveis. Pode-se usar apenas um para a entrada padrão.

Evitar Múltiplos Scanners para a Mesma Entrada:

Você está usando vários objetos Scanner para a mesma entrada (System.in). Pode-se usar apenas um para todas as entradas.

Evitar Uso Excessivo de Variáveis de Controle:

Você tem muitas variáveis de controle (verificadorUm, verificadorDois, verificadorTres, verificadorGeral). Pode-se simplificar isso usando uma única variável ou eliminando algumas delas.

Eliminar Strings Intermediárias Desnecessárias:

Algumas strings intermediárias, como mensagemUm, mensagemDois, etc., podem ser eliminadas para simplificar o código.

Usar Métodos para Dividir Funcionalidades:

Divida o código em métodos para facilitar a leitura e manutenção.

Usar Enums para Tipo de Conta:

Em vez de usar números para representar o tipo de conta, pode-se usar Enums para melhor clareza e legibilidade.

solução!

Aqui está uma versão mais simplificada do seu código incorporando essas dicas:

import java.util.Scanner;

public class Desafio {

    private static Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        int menuOpcoes = 0;
        double saldoCliente = 0;
        String nomeCliente = null;
        TipoConta tipoDeConta = null;

        cadastrarUsuario();

        while (menuOpcoes != 5) {
            exibirMenu();
            menuOpcoes = scanner.nextInt();

            switch (menuOpcoes) {
                case 1:
                    System.out.println(saldoCliente);
                    break;
                case 2:
                    exibirDadosCadastrais(nomeCliente, tipoDeConta);
                    break;
                case 3:
                    realizarRetirada(tipoDeConta, saldoCliente);
                    break;
                case 4:
                    realizarDeposito(saldoCliente);
                    break;
            }
        }

        exibirDadosCadastrais(nomeCliente, tipoDeConta);
        System.out.println("Fim do programa, tenha um bom dia");
    }

    private static void cadastrarUsuario() {
        System.out.println("Insira o nome do cliente: ");
        nomeCliente = scanner.next();

        System.out.println("\nInsira o tipo de conta (1 para corrente, 0 para poupança): ");
        int tipoContaInput = scanner.nextInt();
        tipoDeConta = (tipoContaInput == 1) ? TipoConta.CORRENTE : TipoConta.POUPANCA;

        System.out.println("\nInsira o valor depositado: ");
        saldoCliente = scanner.nextDouble();

        exibirResumoCadastro();
    }

    private static void exibirResumoCadastro() {
        System.out.printf("""
                _______________________________________________
                Nome: %s                                       |
                Tipo de conta: %s                              |
                Saldo atual: %.2f                                |
                _______________________________________________|
                \n""", nomeCliente, tipoDeConta, saldoCliente);
        verificarDadosCadastro();
    }

    private static void verificarDadosCadastro() {
        System.out.println("Os dados estão corretos? (Digite 1 para sim, 0 para não)");
        int verificadorGeral = scanner.nextInt();
        if (verificadorGeral != 1) {
            cadastrarUsuario();
        }
    }

    private static void exibirMenu() {
        System.out.println("""
                \n O que gostaria de fazer:
                1 - Saldo.
                2 - Dados cadastrais.
                3 - Retirada.
                4 - Depósito.
                5 - Sair.
                """);
    }

    private static void exibirDadosCadastrais(String nome, TipoConta tipoConta) {
        System.out.printf("""
                _______________________________________________
                Nome: %s                                       |
                Tipo de conta: %s                              |
                _______________________________________________|
                \n""", nome, tipoConta);
    }

    private static void realizarRetirada(TipoConta tipoConta, double saldo) {
        System.out.println("Digite o valor que deseja retirar");
        double valorRetirada = scanner.nextDouble();

        if (tipoConta == TipoConta.POUPANCA && saldo - valorRetirada < 0) {
            System.out.println("Saldo insuficiente!");
        } else if (tipoConta == TipoConta.CORRENTE && saldo - valorRetirada < -1000) {
            System.out.println("Saldo insuficiente!");
        } else {
            saldoCliente -= valorRetirada;
            System.out.println("Saldo atual: " + saldoCliente + "\n");
        }
    }

    private static void realizarDeposito(double saldo) {
        System.out.println("Digite o valor que deseja depositar");
        double valorDeposito = scanner.nextDouble();
        saldoCliente += valorDeposito;
        System.out.println("Seu saldo atual é de: " + saldoCliente);
    }

    private enum TipoConta {
        CORRENTE, POUPANCA
    }
}

Nesta versão, o código foi organizado em métodos menores para melhorar a legibilidade e reduzir a complexidade. Além disso, os Enums são usados para representar o tipo de conta.

  • Lembrando que são só sigestões, nesse caso, analise o código cuidadosamente, compare-o com o seu e faça as alterações que julgar necessárias.

Se precisar de ajuda, manda aqui. Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!