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

Imprimindo null para os atributos do cliente

Criei um método na classe Conta para printar os dados do cliente após realizar o encapsulamento do programa:

    public void mostraCliente() {
        System.out.println("Nome do cliente: " + this.getTitular().getNome());
        System.out.println("CPF do cliente: " + this.getTitular().getCpf());
        System.out.println("Profissao do cliente: " + this.getTitular().getProfissao());
        System.out.println("Genero do cliente: " + this.getTitular().getGenero());
        System.out.println("");
    }

Quando chamo esse método entretanto, a única mensagem que aparece para cada dado de cada cliente é "Null"

8 respostas

Nicolas,

Você setou os dados?

Envia as duas classes completas.

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

        Conta primeiraConta = new Conta();
        Conta segundaConta = new Conta();

        Cliente Marcos = new Cliente();
        Cliente Renan = new Cliente();


        primeiraConta.setTitular(Marcos);
        primeiraConta.getTitular().setNome("Marcos");
        primeiraConta.getTitular().setCpf("111.111.111-11");
        primeiraConta.getTitular().setProfissao("Programador");
        primeiraConta.getTitular().setGenero("Masculino");

        segundaConta.setTitular(Renan);
        segundaConta.getTitular().setNome("Renan");
        segundaConta.getTitular().setCpf("222.222.222-22");
        segundaConta.getTitular().setProfissao("Programador");
        segundaConta.getTitular().setGenero("Masculino");


        primeiraConta.mostraCliente();
        segundaConta.mostraCliente();


        primeiraConta.deposita(5000);
        primeiraConta.saca(25);
        primeiraConta.transfere(1000, segundaConta);

        segundaConta.deposita(75);
        segundaConta.saca(10);
        segundaConta.transfere(100, primeiraConta);


        primeiraConta.mostraSaldoFinal();
        segundaConta.mostraSaldoFinal();
    }

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

    public void deposita(double valor) {
        this.saldo += valor;
        System.out.println(this.getTitular().getNome() + " depositou " + valor + " reais");
    }

    public boolean saca(double valor) {
        if(this.saldo >= valor) {
            this.saldo -= valor;
            System.out.println(this.getTitular().getNome() + " sacou " + valor + " reais");
            return true;
        } else {
            return false;
        }
    }

    public boolean transfere(double valor, Conta destino) {
        if(this.saldo >= valor) {

            if(valor >= 1000) {
                valor *= 1.05;
                this.saldo -= valor;
                destino.saldo += (valor/1.05);
                System.out.println(this.getTitular().getNome() + " transferiu " + (valor/1.05) + " reais para " + destino.getTitular().getNome());
                System.out.println("");
            } else {
                this.saldo -= valor;
                destino.saldo += valor;
                System.out.println(this.getTitular().getNome() + " transferiu " + valor + " reais para " + destino.getTitular().getNome());
                System.out.println("");
            }
            return true;
        } else {
            System.out.println("Nao foi possivel completar a transferencia por falta de saldo na conta do remetente");
            return false;
        }

    }

    public double getSaldo() {
        return saldo;
    }

    public void setSaldo(double saldo) {
        this.saldo = saldo;
    }

    public int getAgencia() {
        return agencia;
    }

    public void setAgencia(int agencia) {
        this.agencia = agencia;
    }

    public int getNumero() {
        return numero;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }

    public Cliente getTitular() {
        return titular;
    }

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

    public void mostraCliente() {
        System.out.println("Nome do cliente: " + this.getTitular().getNome());
        System.out.println("CPF do cliente: " + this.getTitular().getCpf());
        System.out.println("Profissao do cliente: " + this.getTitular().getProfissao());
        System.out.println("Genero do cliente: " + this.getTitular().getGenero());
        System.out.println("");
    }

    public void mostraSaldoFinal() {
        System.out.println("O cliente " + this.getTitular().getNome() + " possui " + this.getSaldo() + " reais em sua conta");
    }
}

Olá, Nicolas. Você criou a classe Cliente e definiu os atributos corretamente e criou os métodos getters e setters para todos os atributos de Cliente?

Se os valores de Cliente estão aparecendo como Null, provavelmente os métodos getters e setters da classe Cliente não foram definidos.

Depois dá um retorno pra gente, ok? Abraço!

Olá Gustavo, boa tarde, criei a classe Cliente sim, assim como cada um dos getters e setters pra cada atributo dela, aqui está:

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

    public String getNome() {
        return this.nome;
    }

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

    public String getCpf() {
        return this.cpf;
    }

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

    public String getProfissao() {
        return this.profissao;
    }

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

    public String getGenero() {
        return this.genero;
    }

    public void setGenero(String genero) {
        genero = this.genero;
    }
}

Nicolas,

Acredito que seja um erro bem besta:

primeiraConta.setTitular(Marcos); primeiraConta.getTitular().setNome("Marcos"); primeiraConta.getTitular().setCpf("111.111.111-11"); primeiraConta.getTitular().setProfissao("Programador"); primeiraConta.getTitular().setGenero("Masculino");

No momento que esta setando os dados para a classe cliente você esta setando no metodo getTitular acredito que o correto seja :

Marcos .setNome("Marcos");

Marcos .setCpf("111.111.111-11");

Marcos .setProfissao("Programador");

Marcos .setGenero("Masculino"); primeiraConta.setTitular(Marcos);

Faça a alteração para o segundo tambem.

solução!

Olá, Nicolas!

Agora que localizei o problema!

Na classe Cliente, os setters estão com as atribuições invertidas:

No teu código está assim:

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

O correto é assim:

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

Lembre-se que o "this" indica o atributo da classe (variável de instância). A outra variável nome indica o que foi passado como argumento para o método.

Abraço e bons estudos!

Muito obrigado Gustavo e Marcos, agora printou tudo certinho aqui!

Muito obrigado Gustavo e Marcos, agora printou tudo certinho aqui!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software