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

[PROJETO] Projeto Final Finalizado - Preciso de Ajudas para melhorar

Olá, sou iniciante em Java, e tenho apenas o conhecimento em orientação a objetos em Python, queria pedir sugestões para os melhorar o codigo. Estou deixando ele abaixo, desculpa se parecer ruim, fiz em pouco tempo e estou um pouco cansado.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String nomeCliente = "Pedro Pires Mangueira";
        String tipoCliente = "Corrente";
        double saldoCliente = 2500;

        String menuInicial = """
                ***************************
                Dados Iniciais do Cliente
                
                Nome:          Pedro Pires Mangueira
                Tipo conta:    Corrente
                Saldo Inicial: R$ 2,500
                ***************************
                """;
        System.out.println(menuInicial);

        String opcoesMenuInicial = """
                ***************************
                
                1 - Consultar Saldos
                2 - Transferir Valor
                3 - Receber Valor
                4 - Sair
                
                """;

        System.out.println(opcoesMenuInicial);
        String opcaoSelecionada = sc.nextLine();


        for ( int contador = 0; contador <= 1; contador++ ) {
            System.out.println(opcoesMenuInicial);
            String opcaoSelecionado = sc.nextLine();
            if (opcaoSelecionada.equals("1")) {
                System.out.println(saldoCliente);
            }
            else if (opcaoSelecionada.equals("2")) {
                System.out.println("Digite o valor da transfêrencia");
                String valor = sc.nextLine();
                System.out.printf("Você deseja mesmo transferir? Sim ou Nao");
                String perguntaSeDeseja = sc.nextLine();
                if (perguntaSeDeseja.equals("Sim")) {
                    System.out.println("Qual o valor da transfêrencia? ");
                } else {
                    System.out.println("Ok, vamos te transferir para a pagina inicial");
                    /* não sei como faz, mas acho que posso colocar o nome da classe aqui para reperetir o codigo*/
                }
                System.out.println("Confirme a transfêrencia Digitando a sua senha: ");
                String senhaUsuario = "5050";
                String senhaDigitada = sc.nextLine();
                if (senhaDigitada.equals(senhaUsuario)) {
                    System.out.println("Sua transferencia foi confirmada, deseja imprimir a sua notinha? Sim ou Nao");
                    String desejaImprimir = sc.nextLine();
                    if (desejaImprimir.equals("Sim")) {
                        System.out.println("Imprimindo sua notinha... Notinha Imprimada");
                    } else {
                        System.out.println("Notinha não imprimida, muito obrigado pela preferencia");
                        /* loop*/
                    }
                } else {
                    System.out.println("Sua senha esta incorreta");
                    /* loop*/
                }
            }
            else if (opcaoSelecionada.equals("3")) {
                System.out.println("Sua chave Pix é 7159124-92");
                System.out.println("Deseja anotar novamente?");
                String chavePix = sc.nextLine();
                if (chavePix.equals("Sim")){
                    for (contador = 1; contador <= 5; contador++ ) {
                        System.out.println("Sua chave Pix é 7159124-92");
                        System.out.println("Deseja anotar novamente?");
                    }
                }

            }
            else {
                System.out.println("Programa Finalizado");
            }
        }






    }
}
2 respostas
solução!

Parabéns pelo esforço e por já ter avançado tanto com o projeto! Vou compartilhar algumas sugestões, você vÊ se faz sentido pra você ou não.

Em vez de repetir o menu no loop, coloque-o fora e use um while para manter o programa rodando até o usuário optar por sair. Além disso, podemos tornar o código mais claro usando métodos separados para cada ação (consultar saldo, transferir valor, etc.).

Corrija o nome da variável opcaoSelecionada no loop para evitar confusão e aproveite para adicionar confirmações e validar entradas.

Evite "hardcoding" de dados do cliente no código, como nome e saldo, para tornar o código mais flexível.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        // Dados iniciais
        String nomeCliente = "Pedro Pires Mangueira";
        String tipoCliente = "Corrente";
        double saldoCliente = 2500.0;

        // Mostra informações iniciais
        System.out.println("""
            ***************************
            Dados Iniciais do Cliente
            Nome:          %s
            Tipo conta:    %s
            Saldo Inicial: R$ %.2f
            ***************************
            """.formatted(nomeCliente, tipoCliente, saldoCliente));
        
        // Menu principal em loop
        boolean executando = true;
        
        while (executando) {
            System.out.println("""
                ***************************
                1 - Consultar Saldos
                2 - Transferir Valor
                3 - Receber Valor
                4 - Sair
                ***************************
                """);
            System.out.print("Selecione uma opção: ");
            String opcaoSelecionada = sc.nextLine();
            
            switch (opcaoSelecionada) {
                case "1" -> consultarSaldo(saldoCliente);
                case "2" -> saldoCliente = transferirValor(saldoCliente, sc);
                case "3" -> receberValor();
                case "4" -> {
                    System.out.println("Programa Finalizado.");
                    executando = false;
                }
                default -> System.out.println("Opção inválida. Tente novamente.");
            }
        }
        sc.close();
    }

    public static void consultarSaldo(double saldo) {
        System.out.printf("Seu saldo atual é: R$ %.2f%n", saldo);
    }

    public static double transferirValor(double saldo, Scanner sc) {
        System.out.print("Digite o valor da transferência: ");
        double valor = Double.parseDouble(sc.nextLine());
        
        System.out.print("Confirme a transferência (Sim ou Não): ");
        if (!sc.nextLine().equalsIgnoreCase("Sim")) {
            System.out.println("Transferência cancelada.");
            return saldo;
        }
        
        System.out.print("Digite sua senha: ");
        String senhaDigitada = sc.nextLine();
        String senhaCorreta = "5050";
        
        if (!senhaDigitada.equals(senhaCorreta)) {
            System.out.println("Senha incorreta.");
            return saldo;
        }
        
        saldo -= valor;
        System.out.println("Transferência realizada com sucesso!");
        
        System.out.print("Deseja imprimir o comprovante? (Sim ou Não): ");
        if (sc.nextLine().equalsIgnoreCase("Sim")) {
            System.out.println("Imprimindo comprovante...");
        } else {
            System.out.println("Comprovante não impresso.");
        }
        return saldo;
    }

    public static void receberValor() {
        System.out.println("Sua chave Pix é 7159124-92.");
        System.out.println("Use essa chave para receber transferências.");
    }
}

Melhorias e Benefícios

  • Cada funcionalidade agora tem seu próprio método, o que torna o código mais organizado e fácil de entender.
  • O while permite que o usuário interaja até selecionar a opção de sair, eliminando a necessidade de reiniciar o programa manualmente.
  • Agora, os dados do cliente são variáveis, e o saldo é atualizado ao transferir valor, tornando o código mais dinâmico. Abs.

Muito obrigado pela ajuda, penei um pouco pra entender, mas seu codigo com certeza vai me ajudar a melhorar, muito obrigado!. Outra duvida, eu queria entender o porque da repetição do ''return saldo'', e como o codigo voltar para a menu principal dele das opções por exemplo depois de falar que eu não quero transferir um valor.