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

Não compila a ordem natural

Olá, o código abaixo não compilou. Deu um exception error "NullPointerException". Poderiam me ajudar a encontrar o problema?

package br.com.bytebank.banco.modelo;
/**
 * 
 * @author Roger Ruiz da Silva
 * @version 0.1
 *
 */

public abstract class Conta implements Comparable<Conta> {

    protected double saldo;
    private int agencia;
    private int numero;
    private Cliente titular;
    private static int total = 0;

    /**
     * Construtor para inicializar o objeto Conta a partir da agencia e numero
     * @param agencia
     * @param numero
     */

    public Conta(int agencia, int numero) {
        Conta.total++;
        // System.out.println("O total de contas é " + Conta.total);
        this.agencia = agencia;
        this.numero = numero;
        this.saldo = 100;
        // System.out.println("Estou criando a conta " + this.numero);
    }

    public abstract void deposita(double valor);

    /** Valor precisa ser maior que o saldo
     * 
     * @param valor
     * @throws SaldoInsuficienteException
     */

    public void saca(double valor) throws SaldoInsuficienteException {
        if (this.saldo < valor) {
            throw new SaldoInsuficienteException("Saldo insuficiente");
        } 
        this.saldo -= valor;
    }

    public void transfere(double valor, Conta destino) throws SaldoInsuficienteException {
        this.saca(valor);
        destino.deposita(valor);
    }

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

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

    public void setNumero(int numero) {
        if (numero <= 0) {
            System.out.println("Nao pode valor menor igual a 0");
            return;
        }
        this.numero = numero;
    }

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

    public void setAgencia(int agencia) {
        if (agencia <= 0) {
            System.out.println("Nao pode valor menor igual a 0");
            return;
        }
        this.agencia = agencia;
    }

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

    public Cliente getTitular() {
        return this.titular;
    }

    public static int getTotal() {
        return Conta.total;
    }

    @Override
    public boolean equals(Object ref) {

        Conta outra = (Conta)ref;

        if(this.agencia != outra.agencia) {
            return false;
        }

        if(this.numero != outra.numero) {
            return false;
        }
        return true;
    }

    @Override
    public int compareTo(Conta outra) {
        return Double.compare(this.saldo, outra.saldo);
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "Numero: " + this.numero + ", Agencia: " + this.agencia;
    }

}
package br.com.bytebank.banco.teste.util;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import br.com.bytebank.banco.modelo.*;

import br.com.bytebank.banco.modelo.Conta;
import br.com.bytebank.banco.modelo.ContaCorrente;
import br.com.bytebank.banco.modelo.ContaPoupanca;

public class TesteComparator {
    public static void main(String[] args) {
        Conta cc1 = new ContaCorrente(22, 33);
        cc1.deposita(333.0);

        Conta cc2 = new ContaPoupanca(22, 44);
        cc2.deposita(444.0);

        Conta cc3 = new ContaCorrente(22, 11);
        cc3.deposita(111.0);

        Conta cc4 = new ContaPoupanca(22, 22);
        cc4.deposita(222.0);

        List<Conta> lista = new ArrayList<Conta>();
        lista.add(cc1);
        lista.add(cc2);
        lista.add(cc3);
        lista.add(cc4);

        //NumeroDaContaComparator comparator = new NumeroDaContaComparator();
        //lista.sort(comparator);
        Collections.sort(lista);

        for (Conta conta : lista) {
            System.out.println(conta + ", " + conta.getTitular().getNome());
        }
    }
}

class NumeroDaContaComparator implements Comparator<Conta>{

    @Override
    public int compare(Conta c1, Conta c2) {
        return Integer.compare(c1.getNumero(), c2.getNumero());
    }

}
3 respostas

Oi Roger, tudo bom?

Você consegue compartilhar com a gente o erro todo? Assim fica mais facil de descobrir oq ta rolando =)

Abraço

Olá Andre,

Sim. Segue abaixo:

Exception in thread "main" java.lang.NullPointerException
    at br.com.bytebank.banco.teste.util.TesteComparator.main(TesteComparator.java:38)
solução!

Opa, o problema ta aqui:

System.out.println(conta + ", " + conta.getTitular().getNome());

Isso significa que a isntancia de Conta está nula ou que o titular da conta está nulo.

Como você instanciou as contas manualmente, da pra ver que o que está faltando são os titulares das contas. ALgo como:


Conta cc1 = new ContaCorrente(22, 33);
        cc1.deposita(333.0);
    cc1.titular = new Titular();
    // preenche o titular dessa conta

        Conta cc2 = new ContaPoupanca(22, 44);
        cc2.deposita(444.0);
    cc2.titular = new Titular();
    // aqui tb

        Conta cc3 = new ContaCorrente(22, 11);
        cc3.deposita(111.0);

        Conta cc4 = new ContaPoupanca(22, 22);
        cc4.deposita(222.0);
    cc3.titular = new Titular();
    // aqui tb