3
respostas

Desafio Conta Bancária

import java.util.Scanner;

public class Desafio_Conta_Bancaria {
    public static void main(String[] args) {
        String nome = "Vinícius";
        String tipoConta = "Poupança";
        String menu = """
                Digite a opção desejada:
                
                1- Consultar saldo
                2- Receber valor
                3- Transferir Valor
                4- Sair
                """;
        double saldo = 100.00;
        double valor = 0;
        int opcao = 0;

      //Imprme os dados do cliente
        System.out.println("**********************************************************");
        System.out.println("Nome do ciente: " + nome + "\n" +
                "Tipo de conta: " + tipoConta + "\n" +
                "Saldo atual: " + saldo);
        System.out.println("**********************************************************");

        Scanner leitura = new Scanner(System.in); //Inicia a leitura do teclado

        while (opcao != 4){
            System.out.println(menu);
            opcao = leitura.nextInt(); //Faz a leitura da digitação do usuário

            if(opcao == 1){
                System.out.println("Seu saldo atual é: R$ " + saldo + "\n");

            }else if(opcao == 2){
                System.out.println("Digite o valor do depósito: ");
                valor = leitura.nextDouble();
                saldo += valor;

                System.out.println("Você depositou: R$ " + valor +
                            "\nSaldo atualizado: " + saldo);

            } else if (opcao == 3) {
                System.out.println("Digite o valor da transferência: ");
                valor = leitura.nextDouble();
                saldo -= valor;

                if (valor > saldo){
                    System.out.println("Saldo insuficiente!");
                }else{
                    System.out.println("Você transferiu: R$ " + valor +
                            "\nSaldo atualizado: " + saldo);
                }
            } else if (opcao != 1) {
                System.out.println("Opção Invalida!\n"); //Retorna erro para opção inválida
            }
        }
    }
}

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
3 respostas

Oi, Adjan! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Seu projeto Desafio Conta Bancária está muito bem estruturado. Gostei da forma como você usou o while para manter o programa rodando até a opção de saída. Isso deixa o sistema mais dinâmico e próximo de um fluxo real de operações bancárias.

Uma dica interessante para o futuro é validar a transferência antes de subtrair o valor do saldo, garantindo que o cálculo só aconteça se o saldo for suficiente. Veja este exemplo:


if (valor <= saldo) {
    saldo -= valor;
    System.out.println("Transferencia realizada. Saldo: R$ " + saldo);
} else {
    System.out.println("Saldo insuficiente para transferencia.");
}

Esse código confere o saldo antes de realizar a operação, evitando resultados incorretos.

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

Codigo ficou muito bom, fizeste um excelente trabalho utilizando o while para ter multiplas intercalacoes entre escolhas para o usuario. Contudo, ha algumas possiveis melhorias de implementacao para sua aplicacao que a deixaria mais enxuta e legivel.

Uma possivel melhoria, trocar a parte do seu codigo:

System.out.println("**********************************************************");
        System.out.println("Nome do ciente: " + nome + "\n" +
                "Tipo de conta: " + tipoConta + "\n" +
                "Saldo atual: " + saldo);
System.out.println("**********************************************************");

por um multiple line como voce fez na variavel menu, ficando assim:

System.out.printf("""
                **********************************************************
                
                Nome do ciente: %s
                Tipo de conta: %s
                Saldo atual: %.2f
                
                **********************************************************
                
                """.formatted(nome, tipoConta, saldo));

Outra coisa, seria remover esse encadeamento de if else do codigo, passando apenas ifs o chamado Early return ou Guard clauses. Isso facilita a leitura, ja que remove todo aquele encadeamento e identacao forcada, o que prejudica outras pessoas lerem o codigo. O seu codigo esta assim:

if(opcao == 1){
                System.out.println("Seu saldo atual é: R$ " + saldo + "\n");
}else if(opcao == 2){
                System.out.println("Digite o valor do depósito: ");
                valor = leitura.nextDouble();
                saldo += valor;

                System.out.println("Você depositou: R$ " + valor +
                            "\nSaldo atualizado: " + saldo);

} else if (opcao == 3) {
                System.out.println("Digite o valor da transferência: ");
                valor = leitura.nextDouble();
                saldo -= valor;

        if (valor > saldo){
                    System.out.println("Saldo insuficiente!");
         }else{
                    System.out.println("Você transferiu: R$ " + valor +
                            "\nSaldo atualizado: " + saldo);
         }
} else if (opcao != 1) {
                System.out.println("Opção Invalida!\n"); //Retorna erro para opção inválida
 }

isso e muito ruim de ler, nao que esteja errado, mas ha como melhorar como eu disse, fazendo assim:

        if(opcao == 1) IO.printf("Seu saldo atual é: R$ %.2f%n",saldo);

        if(opcao == 2){
            IO.println("Digite o valor do depósito: ");
            valor = leitura.readDouble();
            saldo += valor;

            IO.printf("Você depositou: R$ %.2f %nSaldo atualizado: %.2f%n", valor, saldo);
        }

        if (opcao == 3) {
            IO.println("Digite o valor da transferência: ");
            valor = leitura.readDouble();

            if (valor <= saldo){
                saldo -= valor;
                IO.printf("Você transferiu: R$ %.2f %nSaldo atualizado: %.2f", valor, saldo);
                continue;
            }
            IO.println("Saldo insuficiente!");
        }

        System.out.println("Opção Invalida!\n");

ou entao, voce pode trocar por um switch, evitando assim usar if else encadeado:

switch (opcao) {
                    case 1 -> IO.printf("Seu saldo atual é: R$ %.2f%n", saldo);

                    case 2 -> {
                        IO.println("Digite o valor do depósito: ");
                        valor = leitura.readDouble();
                        saldo += valor;

                        IO.printf("Você depositou: R$ %.2f %nSaldo atualizado: %.2f%n", valor, saldo);
                    }

                    case 3 -> {
                        IO.println("Digite o valor da transferência: ");
                        valor = leitura.readDouble();

                        if (valor <= saldo) {
                            saldo -= valor;
                            IO.printf("Você transferiu: R$ %.2f%nSaldo atualizado: %.2f%n", valor, saldo);
                            continue;
                        }
                        IO.println("Saldo insuficiente!");
                    }

                    case 4 -> IO.println("Saindo...");

                    default -> System.out.println("Opção inválida!\n");
                }

Aqui uma versao ajustada do seu codigo para evitar a passagem de valores negativos como input, evitando erros no sistema e tambem tratamento de error simples para exceptions com Try with resources:

package test;

import com.github.rickmvi.jtoolbox.console.IO;
import com.github.rickmvi.jtoolbox.console.util.Scanf;

public class Test {
    public static void main(String[] args) {

        String nome = "Vinícius";
        String tipoConta = "Poupança";
        String menu = """
                Digite a opção desejada:
                
                1- Consultar saldo
                2- Receber valor
                3- Transferir Valor
                4- Sair
                """;

        double saldo = 100.00;
        double valor;

        int opcao = 0;

        System.out.printf("""
                **********************************************************
                
                Nome do ciente: %s
                Tipo de conta: %s
                Saldo atual: %.2f
                
                **********************************************************%n
                
                """.formatted(nome, tipoConta, saldo));

        try (Scanf leitura = new Scanf()) {
            while (opcao != 4){
                System.out.println(menu);
                opcao = leitura.readInt();

               if(opcao == 1) IO.printf("Seu saldo atual é: R$ %.2f%n",saldo);

               if(opcao == 2){
                    IO.println("Digite o valor do depósito: ");
                    valor = leitura.readDouble();
                    
                    if (valor <= 0) continue;
                    
                    saldo += valor;
                    IO.printf("Você depositou: R$ %.2f %nSaldo atualizado: %.2f%n", valor, saldo);
                }

                if (opcao == 3) {
                    IO.println("Digite o valor da transferência: ");
                    valor = leitura.readDouble();

                    if (valor < saldo && valor > 0){
                        saldo -= valor;
                        IO.printf("Você transferiu: R$ %.2f %nSaldo atualizado: %.2f%n", valor, saldo);
                        continue;
                    }
                    IO.println("Saldo insuficiente!");
                }

                System.out.println("Opção Invalida!\n");
            }
        }
    }
}