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

[Solução do desafio] Conta bancária virtual

Ainda não assisti as aulas de passo a passo. Estou na aula 2 do módulo 4. Sem olhar, essa é a solução do desafio. Sintam-se livres para opinar ou consultar.

BancoOnline.java:

import java.util.Scanner;

public class BancoOnline {
    String donoDaConta = "Karina";
    String tipoDaConta = "Corrente";
    Double saldoDaConta = 0.0;
    double valor;
    Scanner scanner = new Scanner(System.in);
    int option = 0;
    public void imprimeMenu(){
        System.out.println("1 ---Adiciona saldo--- \n" +
                "2 ---Transfere valor--- \n" +
                "3 ---Verifica o saldo--- \n" +
                "4 ---Mostra conta--- \n" +
                "5 ---Sair--- \n" +
                "Digite a opção desejada: ");
        option = scanner.nextInt();
        switch (option){
            case 1:
                System.out.println("Entre com o valor: ");
                valor = scanner.nextDouble();
                adicionaDinheiro(valor);
                imprimeMenu();
            break;
            case 2:
                System.out.println("Entre com o valor: ");
                valor = scanner.nextDouble();
                tiraDinheiro(valor);
                imprimeMenu();
            break;
            case 3:
                consultaDinheiro();
                imprimeMenu();
            break;
            case 4:
                consultaDadosConta();
                imprimeMenu();
            case 5:
                System.out.println("Saindo da aplicação");
                scanner.close();
                break;
            default:
                System.out.println("Opção inválida");
        }
    }

    private void consultaDadosConta() {
        System.out.println("Titular da conta: "+ donoDaConta +"\n"
                +"Tipo da conta: " +tipoDaConta + "\n"
                + "Saldo: "+ saldoDaConta );
    }
    public void adicionaDinheiro(Double valorAdicionado){
        if(valorAdicionado<0){
            System.out.println("Entre com um valor positivo");
        }
        saldoDaConta = saldoDaConta + valorAdicionado;
    }
    public void tiraDinheiro(Double valorRetirado){
        if(valorRetirado<0){
            System.out.println("Transferências apenas de valores positivos");
        }
        if(saldoDaConta - valorRetirado < 0){
            System.out.println("Saldo insuficiente");
        }
        else {
            saldoDaConta = saldoDaConta - valorRetirado;
        }

    }
    public void consultaDinheiro(){
        System.out.println("Saldo: "+ saldoDaConta);
    }
}

Main.java:

public class Main {
    public static void main(String[] args) {
       BancoOnline bancoOnline = new BancoOnline();
       bancoOnline.imprimeMenu();
    }
}

PS: Não fiz tratamento dos tipos de dados numéricos porque entendi que o tipo menor cabe no maior. Testei e não achei um problema. Mesmo que o usuário entre com um Int, o sistema registra um Double. Se entra 1, na hora de imprimir o saldo, aparece 1.0 etc.

4 respostas

Uma outra coisa, eu chamo "imprimeMenu();" dentro dos cases do switch(Menos do de sair, porque quero que termine o programa). Não sei se essa é a melhor das ideias. Isso seria recursividade?

solução!

Olá Karina,

O código que você postou parece estar funcionando bem. É importante lembrar que a falta de tratamento de tipos de dados pode causar problemas em alguns casos, mas se você testou e não encontrou nenhum problema, tudo bem.

Uma sugestão que eu tenho é adicionar um break no final do case 4 do switch, para evitar que o programa continue executando os outros cases. Ficaria assim:

case 4: consultaDadosConta(); imprimeMenu(); break;

Fora isso, parabéns pela solução do desafio! Espero ter ajudado e bons estudos!

É verdade. Esqueci do break ali. Vou pensar em uma maneira de tratar os dados porque é importante mesmo. Valeu pela revisão. ^-^

Update: Assisti as aulas que faltavam do curso e lá, para resolver a questão de imprimir de novo o menu, se usa o while. Essa ideia parece melhor do que ficar chamando o próprio método. Chamar o "imprimeMenu()" dentro dele mesmo repete muito código.