4
respostas

eu não consigo entender porquê dá o erro Exception in thread "main" java.lang.NullPointerException

o erro completo:

Exception in thread "main" java.lang.NullPointerException 
at src.Conta3.deposita(Conta3.java:22)
at src.TesteContas.main(TesteContas.java:5)

código:

package src;

public class Cliente {
    private String nome = "Sem Nome";
    private String CPF = "sem.cpf.000-00";
    private String emprego = "desempregado";
    private String nomeConta = "semnome";

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

    public String getCPF() {
        return this.CPF;
    }

    public String getEmprego() {
        return this.emprego;
    }

    public String getNomeConta() {
        return this.nomeConta;
    }

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

    public void setCPF(String CPF) {
        this.CPF = CPF;
    }

    public void setEmprego(String emprego) {
        this.emprego = emprego;
    }

    public void setNomeConta(String nomeConta) {
        this.nomeConta = nomeConta;
    }
}
package src;

public class Conta3 {
    private double saldo;
    private int agencia = 1541;
    private int numero = 15453;
    private Cliente titular;
    private static int quantidadeContas;

    public Conta3(int agencia, int numero) {
        Conta3.quantidadeContas++;
        System.out.println("o total de contas agora é de " + Conta3.quantidadeContas + " contas");
        this.agencia = agencia;
        this.setNumero(numero);
        System.out.println("cersisaancdoonctoanetda;oida");
    }

    public void deposita(double valor) {
        if (valor > 0) {
            this.saldo += valor;
            System.out.println("O valor foi depositado com sucesso!");
            System.out.println("Agora a conta " + this.titular.getNomeConta() + " tem R$" + this.saldo + "!");
        } else {
            System.out.println("O SISTEMA NÃO É BURRO, RESPEITE OS PROGRAMADORES!");
        }
        System.out.println();
    }

    public void saca(double valor) {
        if (valor > 0) {
            if (valor <= this.saldo) {
                this.saldo -= valor;
                System.out.println("O valor foi sacado com sucesso!");
                System.out.println("Agora a conta " + this.titular.getNomeConta() + " tem R$" + this.saldo + "!");
            } else {
                System.out.println("Infelizmente, não há dinheiro o suficiente na conta " + this.titular.getNomeConta()
                        + " para sacar R$" + valor);
            }
        } else {
            System.out.println("O SISTEMA NÃO É BURRO, RESPEITE OS PROGRAMADORES!");
        }
        System.out.println();
    }

    public void transfere(double valor, Conta3 destino) {
        if (this != destino && this.saldo >= valor) {
            this.saldo -= valor;
            destino.saldo += valor;
            System.out.println("O valor foi transferido com sucesso!");
            System.out.println("Agora a conta " + this.titular.getNomeConta() + " tem R$" + this.saldo + ", e a conta "
                    + destino.titular.getNomeConta() + ", R$" + destino.saldo + "!");
        } else if (this == destino) {
            System.out.println("O SISTEMA NÃO É BURRO, RESPEITE OS PROGRAMADORES!");
        } else {
            System.out.println("Infelizmente não há dinheiro o suficiente na conta origem");
        }
        System.out.println();
    }

    public double getSaldo() {
        return this.saldo;
    }

    public int getAgencia() {
        return this.agencia;
    }

    public int getNumero() {
        return this.numero;
    }

    public void setAgencia(int agencia) {
        if (agencia > 0) {
            this.agencia = agencia;
        } else {
            System.out.println("O SISTEMA NÃO É BURRO, RESPEITE OS PROGRAMADORES!");
        }
    }

    public void setNumero(int numero) {
        if (numero > 0) {
            this.numero = numero;
        } else {
            System.out.println("O SISTEMA NÃO É BURRO, RESPEITE OS PROGRAMADORES!");
        }
    }

    public static int getQuantidadeContas() {
        return Conta3.quantidadeContas;
    }
}
package src;
public class TesteContas {
    public static void main(String[] args) {
        ContaCorrente contaCorrente = new ContaCorrente(111, 111);
        contaCorrente.deposita(100);
        ContaPoupanca contaPoupanca = new ContaPoupanca(222, 222);
        contaPoupanca.deposita(200);
    }
}

alguém pode me ajudar?

4 respostas

Você não está setando o cliente da conta !

 public void deposita(double valor) {
        if (valor > 0) {
            this.saldo += valor;
            System.out.println("O valor foi depositado com sucesso!");
            System.out.println("Agora a conta " + this.titular.getNomeConta() + " tem R$" + this.saldo + "!");                                                
        } else {
            System.out.println("O SISTEMA NÃO É BURRO, RESPEITE OS PROGRAMADORES!");
        }
        System.out.println();
    }

Essa linha está tentando acessar o titular da conta mais pelo código que você postou não está setando ele.


    System.out.println("Agora a conta " + this.titular.getNomeConta() + " tem R$" + this.saldo + "!");

Exemplo :

ContaCorrente contaCorrente = new ContaCorrente(111, 111);
    contaCorrente.setTitular(new Cliente())
        contaCorrente.deposita(100);

eu não entendi direito, como que eu vou criar o método setTitular na sua resposta?

É só criar um setTitular que recebe um cliente igual os outros atributos normais !

Cliente titular = new Cliente();
contaCorrente.setTitular(titular)

essa linha acima é a mesma coisa que essa abaixo

contaCorrente.setTitular(new Cliente() )

---------------------
Ali eu criei um cliente baseado na sua classe cliente onde você já seta os atributos como abaixo ! Se você não tivesse feito isso daria null da mesma forma !

   private String nome = "Sem Nome";
    private String CPF = "sem.cpf.000-00";
    private String emprego = "desempregado";
    private String nomeConta = "semnome";

--- Assim se cria o metodo set titular ele recebe um cliente - ---

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

`

Obrigado Roger. É que eu estou iniciando o meu aprendizado em programação e as vezes é difícil entender algumas estruturas de código. Se não for abusar muito da sua paciência, você poderia me explicar de uma forma mais didática como criar o método setTitular na classe "conta"? Obrigado.