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

Criar o Cliente pela criação da conta

Classe conta:

 public class Conta {

    private double saldo;
    private int agencia;
    private static int idConta = 1000;
    private static int totalContas = 0;
    private Cliente titular;
    private int numero;

    public Conta(String nome,String cpf, String endereco){
        numero = idConta;
        saldo = 0;
        agencia = 0001;
        idConta ++;
        totalContas ++;
        Cliente titular = new Cliente(nome, cpf, endereco);
    }

    public void deposito (double valor){

        if (valor > 0) {
            this.saldo += valor;
            System.out.println("Deposito de: " + valor + "\nNa conta: " + this.numero + "\nRealizado com sucesso.");
        } else
            System.out.println("Não é possivel depositar valor negativo. Tente novamente");
    }
    public boolean saca (double valor){
        if (this.saldo >= valor && valor > 0){
            this.saldo -= valor;
            System.out.println("Saque de: " + valor + " realizado com sucesso.");
            return true;
        }
        if (valor == 0){
            System.out.println("Não é possivel sacar R$ 0,00. Tente novamente.");
            return false;
        }
        else {
            System.out.println("Saldo insuficiente.");
            return false;
        }
    }
    public boolean tranfere (double valor, Conta destino){
        if (this.saca (valor) == true) {
            destino.deposito(valor);
            return true;
        }else
            return false;
    }
    public void getAgencia (){
        System.out.println("Agencia: " + this.agencia);
    }
    public void getConta(){
        System.out.println("Conta: " + this.numero);
    }
    public void getSaldo (){
        System.out.println("Saldo: " + this.saldo);
    }
    public void getExtrato(){
        getAgencia();
        getConta();
        titular.getNome();
        getSaldo();
    }
}

Classe cliente:

public class Cliente {

    private String nome;
    private String cpf;
    private String endereco;
    private static int id_cliente;

    public Cliente(String nome,String cpf, String endereco){
        id_cliente ++;
        setNome(nome);
        setCpf(cpf);
        setEndereco(endereco);
    }
    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 getEndereco() {
        return endereco;
    }
    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }
}

Ao executar a main e criar uma nova conta aparece o seguinte erro:

Agencia: 1
Conta: 1000
Exception in thread "main" java.lang.NullPointerException
    at Conta.getExtrato(Conta.java:61)
    at CriaConta.main(CriaConta.java:6)

Process finished with exit code 1


Código da main:
public class CriaConta {
    public static void main(String[] args) {
   Conta conta_1 = new Conta("Fulano","04798475920","Coves");
   Conta conta_2 = new Conta("Ciclano", "123456789", "Flores");

    conta_1.getExtrato();
    conta_2.getExtrato();

    System.out.println("\nDeposito:");
    conta_1.deposito(150);
    conta_2.deposito(500);

    System.out.println("\nExtrato: ");
    conta_1.getExtrato();
    conta_2.getExtrato();

}

} `

1 resposta
solução!

Olá Pedro, tudo bem com você?

O problema está no seu construtor, veja:

    public Conta(String nome,String cpf, String endereco){
        numero = idConta;
        saldo = 0;
        agencia = 0001;
        idConta ++;
        totalContas ++;
        Cliente titular = new Cliente(nome, cpf, endereco);
    }

Em especial aqui:

Cliente titular = new Cliente(nome, cpf, endereco);

Quando você faz isso dentro do construtor, você está criando uma nova variável chamada titulare atribuindo a ela esse cliente

Na verdade o que queremos, é atualizar o valor do atributo titular da nossa conta, então no caso, deveria ser:

titular = new Cliente(nome, cpf, endereco);

Dessa forma quando fazemos getExtrato() o titular terá informações validas para fazer titular.getNome()

Abraços e Bons Estudos!