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

[Dúvida] Como fazer esse desafio usando getters, setters e contrutores ?

Olá pessoal, como estão? Eu estava fazendo a versão antiga deste curso e resolvi atualizar para a nova formação para reforçar o que já aprendi e aprender novas soluções. Quando a atividade foi proposta, pensei em reutilizar o que já havia feito, mas como ainda sou iniciante, não consegui completar o desafio . O código compila, porem na hora ele solicita 2x a opção de transferir e sacar . Estou em busca de melhorar esse código se alguém puder ajudar com revisão e dicas sobre como melhorar essa implementação, ficarei muito agradecido.

public class Conta {
    private String agencia;
    private int numero;
    private double saldo;
    private Cliente titular;

    public Conta(String agencia, int numero, double saldo, Cliente titular) {
        this.agencia = agencia;
        this.numero = numero;
        this.saldo = saldo;
        this.titular = titular;
    }

    public void deposita(double valor) {
        this.saldo += valor;
    }
    public boolean saca(double valor) {
        if (this.saldo >= valor) {
            this.saldo -= valor;
            return true;
        } else {
            return false;
        }
    }
    public boolean transfere(double valor, Conta destino) {
        if (this.saldo >= valor) {
            this.saldo -= valor;
            destino.deposita(valor);
            return true;
        } else {
            return false;
        }
    }
    public int getNumero() {
        return numero;
    }

    public void setNumero(int numero) {
        if (numero <= 0)
            System.out.println("Número inválido, número deve ser maior que zero");
        this.numero = numero;
    }

    public double getSaldo() {
        return saldo;
    }


    public String getAgencia() {
        return agencia;
    }

    public void setAgencia(String agencia) {
        if (numero <= 0)
            System.out.println("Número inválido, número deve ser maior que zero");
        this.agencia = agencia;
    }

    public Cliente getTitular() {
        return titular;
    }

    public void setTitular(Cliente titular) {
        this.titular = titular;
    }

}
public class Cliente {
    private String nome;
    private String cpf;
    private String profissao;

    public Cliente(String nome, String cpf, String profissao) {
        this.nome = nome;
        this.cpf = cpf;
        this.profissao = profissao;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public String getProfissao() {
        return profissao;
    }

    public void setProfissao(String profissao) {
        this.profissao = profissao;
    }
}
3 respostas

Código do Desafio + resultado da tela. Também tenho outro problema na hora de transferir , por algum motivo não debita o valor / transfere o valor digitado.

import java.util.Scanner;

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

        Cliente wayne = new Cliente("Bruce Wayne", "112.358.132-10", "Bilionário");
        Conta contadobruce = new Conta("123-4", 123456, 1000.0, wayne);

        Cliente clark = new Cliente("Clark Kent", "358.132.134-55", "Jornalista");
        Conta contadoclark = new Conta("123-4", 78921, 0.0, clark);


        int opcao = 0;

        System.out.println("""
                Nome: %s
                CPF: %s
                Profissão: %s
                Saldo: %.2f
                """.formatted(
                contadobruce.getTitular().getNome(),
                contadobruce.getTitular().getCpf(),
                contadobruce.getTitular().getProfissao(),
                contadobruce.getSaldo()
        ));
        String menu = """
                1 - Saldo
                2 - Transferir
                3 - Sacar
                4 - Sair
                """;
        Scanner leitura = new Scanner(System.in);


        while (opcao != 4) {
            System.out.println(menu);
            opcao = leitura.nextInt();

            if (opcao == 1) {
                System.out.println("Saldo: " + contadobruce.getSaldo());
            } else if (opcao == 2) {
                System.out.println("Digite o valor a ser transferido: " + contadobruce.transfere(leitura.nextDouble()
                        , contadoclark));
                            //na execução do codigo ele solicita a opção 2x e o valor a ser transferido, transferencia e executada
                if (contadobruce.getSaldo() < leitura.nextDouble()) {
                    System.out.println("Saldo insuficiente");
                } else {
                    System.out.println("Transferência realizada com sucesso");
                    System.out.println("Novo saldo: " + contadobruce.getSaldo());
                }
            } else if (opcao == 3) {
                System.out.println("Digite o valor a ser sacado: " + contadobruce.saca(leitura.nextDouble()));
                if (contadobruce.getSaldo() < leitura.nextDouble()) {
                    System.out.println("Saldo insuficiente");
                } else {
                    System.out.println("Saque realizado com sucesso");
                    System.out.println("Novo saldo: " + contadobruce.getSaldo());
                }
            } else if (opcao == 4) {
                System.out.println("Obrigado por utilizar nossos serviços");
            } else {
                System.out.println("Opção inválida");
            }

            //usei esses parametros para verificar se a transferencia e o saque estavam sendo realizados
            System.out.println("Saldo de Bruce Wayne: " + contadobruce.getSaldo());
            System.out.println("Saldo de Clark Kent: " + contadoclark.getSaldo());;


        }

    }

    }

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

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

solução!

Olá,

fiz algumas alterações nas String's dos menus, acredito que seja em razão da versão do meu Java.

Mas o foco principal é no Scanner. Vc está utilizando o Scanner direto nos ifs. Dê uma olhada na forma que fiz, acredito que resolveu o problema.


import java.util.Scanner;

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

        Cliente wayne = new Cliente("Bruce Wayne", "112.358.132-10", "Bilionário");
        Conta contadobruce = new Conta("123-4", 123456, 1000.0, wayne);

        Cliente clark = new Cliente("Clark Kent", "358.132.134-55", "Jornalista");
        Conta contadoclark = new Conta("123-4", 78921, 0.0, clark);

        int opcao = 0;

        System.out.printf(
                "Nome: %s\n" +
                "CPF: %s\n" + 
                "Profissão: %s\n" +
                "Saldo: %.2f\n",
                contadobruce.getTitular().getNome(),
                contadobruce.getTitular().getCpf(),
                contadobruce.getTitular().getProfissao(),
                contadobruce.getSaldo());
        String menu = String.format(
                "1 - Saldo\n" +
                "2 - Transferir\n" + 
                "3 - Sacar\n" +
                "4 - Sair\n");
        Scanner leitura = new Scanner(System.in);


        while (opcao != 4) {
            System.out.println(menu);
            System.out.print("> ");
            opcao = leitura.nextInt();

            if (opcao == 1) {
                System.out.println("Saldo: " + contadobruce.getSaldo());
            } else if (opcao == 2) {
                System.out.printf("Digite o valor a ser transferido: ");
                double valorASerTransferido = leitura.nextDouble(); // atribua o valor de entrada a uma variável
                contadobruce.transfere(valorASerTransferido, contadoclark);

                System.out.print("> ");                
                // substitua o Scanner dos if's pela variavel criada
                // Atente-se ao contexto, ou seja, onde a variável é criada e onde 
                // deve ser utilizada.
                if (contadobruce.getSaldo() < valorASerTransferido) { 
                    System.out.println("Saldo insuficiente");
                } else {
                    System.out.println("Transferência realizada com sucesso");
                    System.out.println("Novo saldo: " + contadobruce.getSaldo());
                }
            } else if (opcao == 3) {
                System.out.print("> ");
                System.out.printf("Digite o valor a ser sacado: ");
                double valorASerSacado = leitura.nextDouble();
                contadobruce.saca(valorASerSacado);

                if (contadobruce.getSaldo() < valorASerSacado) {
                    System.out.println("Saldo insuficiente");
                } else {
                    System.out.println("Saque realizado com sucesso");
                    System.out.println("Novo saldo: " + contadobruce.getSaldo());
                }
            } else if (opcao == 4) {
                System.out.println("Obrigado por utilizar nossos serviços");
            } else {
                System.out.println("Opção inválida");
            }

            //usei esses parametros para verificar se a transferencia e o saque estavam sendo realizados
            System.out.println("Saldo de Bruce Wayne: " + contadobruce.getSaldo());
            System.out.println("Saldo de Clark Kent: " + contadoclark.getSaldo());;


        }

    }

}
Resolveu? Por favor, marcar como solucionado ✔. Bons estudos! ⌣

Olá Luciano, Deu certinho . A solução realmente foi criar uma nova variável valorASerTransferido pra receber o valor de entrada.

muito obrigado !