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

Desafio Final - BankAccount | Minha Resolução

Para este desafio final, quis me desafiar um pouco, então me propus a criar um código um pouco mais elaborado que os que vinha fazendo antes, criando class próprios para cada tipo de entidade dos negócios. Também apliquei tratamento com try catch para evitar errors desnecessários por poderiam ser gerando por um input de tipos diferentes da class Scanner gerando um InputMismatchException e assim fazendo o programa fechar. O resultado final do desafio foi este:

Class main:

/**
 * Main class that simulates a bank account.
 * Allows the user to perform operations such as balance inquiry, deposit, and withdrawal.
 *
 * @author rickmviana
 */
public class BankAccount {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        People people = new People();

        System.out.println("Qual o seu nome?");
        String name = input.nextLine();
        people.setName(name);
        System.out.println("Qual o seu saldo?");

        double saldo = 0.0;
        boolean verify = false;
        while (!verify) {
            try {
                saldo = input.nextDouble();
                verify = true;
            } catch (InputMismatchException e) {
                System.out.println(Messages.invalidInput());
                input.next(); // Clear scanner buffer
            }
        }
        people.deposit(saldo);

        int option;
        do {
            System.out.println(Messages.text());
            try {
                option = input.nextInt();
                switch (option) {
                    case 1:
                        System.out.println(people);
                        break;

                    case 2:
                        System.out.println("Informe o valor a receber: ");
                        double balance = input.nextDouble();
                        checkDeposit(people, balance);
                        break;

                    case 3:
                        System.out.println("Informa o valor da transferencia: ");
                        double balance2 = input.nextDouble();
                        withdraw(people, balance2);
                        break;

                    case 4:
                        System.out.println("Saindo...");
                        break;

                    default:
                        System.out.println("Escolha uma entrada valida!");
                }

            } catch (InputMismatchException e) {
                System.out.println(Messages.invalidInput());
                input.next(); // Clear scanner buffer
                option = 0;
            }
        } while (option != 4);

        input.close();
    }

    /**
     * Performs a withdrawal from the user's account, checking if there is enough balance.
     * @param people People object (user).
     * @param balance Amount to withdraw.
     */
    private static void withdraw(People people, double balance) {
        if (balance > people.getBalance() || balance <= 0) {
            System.out.println(Messages.insufficientBalance());
        } else {
            people.withdrawal(balance);
            System.out.println(people.getBalanceString());
        }
    }

    /**
     * Performs a deposit into the user's account.
     * @param people People object (user).
     * @param balance Amount to deposit.
     */
     private static void checkDeposit(People people, double balance) {
        if (balance < 0) {
            System.out.println(Messages.value());
        } else {
            people.deposit(balance);
            System.out.println(people.getBalanceString());
        }
     }
}

o resto tenho de enviar por imagem, pôs ultrapassa o limite de linhas aqui da postagem. Interface Counter Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Class Messages Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Class People

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta
solução!

Olá, Rick. Tudo bem?

Muito obrigado por compartilhar o seu código aqui com a gente. Parabéns pelo trabalho. Continue com essa dedicação.

Muito bom como você implementou o try-catch para tratar InputMismatchException, garantindo que entradas inválidas não interrompam o programa. Isso melhora bastante a experiência do usuário. Também foi uma ótima decisão separar a lógica de mensagens em uma classe Messages, tornando o código mais organizado.

Uma dica interessante: você pode utilizar input.hasNextDouble() antes de nextDouble() para evitar a exceção, deixando o código ainda mais fluido:


if (input.hasNextDouble()) {
    saldo = input.nextDouble();
    verify = true;
} else {
    System.out.println(Messages.invalidInput());
    input.next(); // Limpa o buffer
}

Isso evita a necessidade do try-catch nesse caso específico.

Conte com o apoio do Fórum. Abraços e bons estudos.