Problema com bigdecimal[RESOLVIDO]

tenho as seguintes classes e não consigo testar, tenho o seguinte erro:

Exception in thread "main" java.lang.NullPointerException
	at br.caelum.cap07.Conta.deposita(Conta.java:18)
	at br.caelum.cap07.ContaCorrente.deposita(ContaCorrente.java:20)
	at br.caelum.cap07.TestaConta.main(TestaConta.java:9)
import java.math.BigDecimal;

public class Conta {
	private BigDecimal saldo;
	private BigDecimal limite;

	public Conta(BigDecimal limite) {
		this.limite = limite;
	}

	public BigDecimal getSaldo() {
		return saldo;
	}

	public void deposita(BigDecimal valor) {
		saldo.add(valor);
	}

	public void saca(BigDecimal valor) {
		if (this.saldo.add(this.limite).doubleValue() >= valor.doubleValue()) {
			this.saldo.subtract(valor);
		} else
			throw new IllegalArgumentException("estourou limite!");
	}

	public void atualiza(BigDecimal taxa) {
		saldo.multiply(taxa);
	}
}

import java.math.BigDecimal;

public class ContaCorrente extends Conta {

	public ContaCorrente(BigDecimal limite) {
		super(limite);
	}

	//protected BigDecimal saldo;

	public void atualiza(BigDecimal taxa) {
//		this.saldo += this.saldo * taxa * 2;
		super.atualiza(taxa.multiply(new BigDecimal("2")));
	}

	public void deposita(BigDecimal valor) {
//		this.saldo += valor - 0.10;
		super.deposita(valor.subtract(new BigDecimal("0.10")));
	}
}

import java.math.BigDecimal;

public class ContaPoupanca extends Conta {

	public ContaPoupanca(BigDecimal limite) {
		super(limite);
	}

	protected BigDecimal saldo;

	public void atualiza(BigDecimal taxa) {
		this.saldo.add(this.saldo.multiply(taxa).multiply(new BigDecimal("3")));
//		super.atualiza(3 * taxa);
	}
}

import java.math.BigDecimal;

public class TestaConta {

	public static void main(String[] args) {
		Conta corrente = new ContaCorrente(new BigDecimal("1000"));
		corrente.deposita(new BigDecimal("500"));
		corrente.saca(new BigDecimal("30"));
		corrente.atualiza(new BigDecimal("1.5"));
		System.out.println(corrente.getSaldo());
		
		Conta poupanca = new ContaPoupanca(new BigDecimal("1000"));
		poupanca.deposita(new BigDecimal("500"));
		poupanca.saca(new BigDecimal("100"));
		//poupanca.atualiza(new BigDecimal("0.5"));
		System.out.println(poupanca.getSaldo());
	}
}

Qual é o saldo da conta quando é criada?

Quando deposito defino o saldo. Ou está errado?
Como corrijo para alterar o saldo depositando?

Quando depositas estás a fazer bem.
O problema é que não tens lá nada (tens null) porque não definiste um saldo inicial.

public Conta(BigDecimal limite) {  
        this.limite = limite;  
        this.saldo = BigDecimal.ZERO;
} 

Acho que não entendi, porque mudei e continua retornando zero, quando devia retornar o valor após o saque. O valor agora só vem zero não atualiza após sacar.
Como mudo meu exemplo para funcionar com bigdecimal?
teria algum exemplo?

Isso é porque o BigDecimal é imutável, ou seja, o seu valor não é alterado.
Aos fazeres saldo.add(valor); estás a criar um novo BigDecimal com o valor da soma, mas não o estás a atribuir a nada.
O que tu queres fazer é: saldo = saldo.add(valor);

O mesmo se aplica às restantes operações que fazes: multiply, subtract…

1 curtida

Valeu.