Dificuldade de criar um método que corre uma Lista e retorna um BigDecimal

9 respostas
P

Estou tentando criar um método chamado GetSaldo() --> corre uma lista do tipo Lançamento e retorna o saldo

import java.util.ArrayList;
class Conta {

  private String numero;
  private int tipo;

  private ArrayList<Lancamento> lanc;

  Conta() {
    this.lanc = null;
  }

  Conta(String numero, int tipo) {
    super();
    this.numero = numero;
    this.tipo = tipo;
    this.lanc = null;
  }

  public String getNumero() {
    return numero;
  }
  public void setNumero(String numero) {
    this.numero = numero;
  }

  public int getTipo() {
    return tipo;
  }
  public void setTipo(int tipo) {
    this.tipo = tipo;
  }

  public ArrayList<Lancamento> getLanc() {
    return lanc;
  }
  public void setLanc(ArrayList<Lancamento> lanc) {
    this.lanc = lanc;
  }

  //metodo
  public BigDecimal getSaldo() {
    for (int i=0; i < getLanc().length; i++) {
      if (getLanc().getTipo() == 1) {
	BigDecimal saldo = saldo + getLanc().getValor();
      } else if (getLanc().getTipo() == 0) {
	BigDecimal saldo = saldo + getLanc().getValor();
      }
    }
    return saldo;
  }
}
import java.util.Calendar;
import java.math.BigDecimal;
class Lancamento {

  private Calendar data;
  private BigDecimal valor;
  private int tipo;
  private Conta conta;

  Lancamento() {
    super();
    this.conta = conta;
  }

  public Calendar getData() {
    return data;
  }
  public void setData(Calendar data) {
    this.data = data;
  }

  public BigDecimal getValor() {
    return valor;
  }
  public void setValor(BigDecimal valor) {
    this.valor = valor;
  }

  public int getTipo() {
    return tipo;
  }
  public void setTipo(int tipo) {
    if (tipo == 0) { //Lançamento de Débito
      this.tipo = tipo;
    } else if (tipo == 1) { //Lançamento de Crédito
      this.tipo = tipo;
    }
  }

  public Conta getConta() {
    return conta;
  }
  public void setConta(Conta conta) {
    this.conta = conta;
  }
}

9 Respostas

E
public BigDecimal getSaldo() {  
    BigDecimal saldo = BigDecimal.ZERO;
    for (int i=0; i < getLanc().length; i++) {  
      if (getLanc().getTipo() == 1) {  
          saldo = saldo + getLanc().getValor();  
      } else if (getLanc().getTipo() == 0) {  
          saldo = saldo + getLanc().getValor();  
      }  
    }  
    return saldo;  
  }
E

A propósito, acho que você está calculando o saldo errado.
Só olhando o programa completo é que vi que 0= débito e 1 = crédito.
Use uma constante ou um enum, em vez de deixar posto em um comentário o valor 0 e 1 . (e se for 2, o que ocorre? )
Como não sei se débito para você é para aumentar ou para diminuir o saldo (depende da convenção contábil) não corrigi para você esse erro bobo.

aix

se esta retornando erro deveria postar aqui o stacktrace.

altera aqui:

BigDecimal saldo = saldo + getLanc().getValor();

para:

BigDecimal saldo = new BigDecimal(saldo + getLanc().getValor());

P

A mensagem de erro ao compilar antes era:
javac Conta.java

Conta.java:42: cannot find symbol

symbol  : class BigDecimal

location: class Conta

public BigDecimal getSaldo() {

^

Conta.java:43: cannot find symbol

symbol  : variable length

location: class java.util.ArrayList

for (int i=0; i < getLanc().length; i++) {

^

Conta.java:44: cannot find symbol

symbol  : method getTipo()

location: class java.util.ArrayList

if (getLanc().getTipo() == 1) {

^

Conta.java:45: cannot find symbol

symbol  : class BigDecimal

location: class Conta

BigDecimal saldo = saldo + getLanc().getValor();

^

Conta.java:45: cannot find symbol

symbol  : method getValor()

location: class java.util.ArrayList

BigDecimal saldo = saldo + getLanc().getValor();

^

Conta.java:46: cannot find symbol

symbol  : method getTipo()

location: class java.util.ArrayList

} else if (getLanc().getTipo() == 0) {

^

Conta.java:47: cannot find symbol

symbol  : class BigDecimal

location: class Conta

BigDecimal saldo = saldo + getLanc().getValor();

^

Conta.java:47: cannot find symbol

symbol  : method getValor()

location: class java.util.ArrayList

BigDecimal saldo = saldo + getLanc().getValor();

^

Conta.java:50: cannot find symbol

symbol  : variable saldo

location: class Conta

return saldo;

^

9 errors
P

entanglement, o valor 0(débito) é para diminuir e o 1(crédito) é para aumentar, e quanto ao tipo diferente de 0 e 1, vou analisar isso depois, estou tentando implementar essas condições, depois eu elaboro uma exceção

P

Coloquei o arquivo do Diagrama de Classe para tentar explicar o que eu quero


P

Alguém??
Preciso de um help!

E

Pergunta um. Dá para você tentar com double primeiro, e depois tentar com BigDecimal? Não acho que você já tenha de fazer as contas com BigDecimal.

De qualquer maneira, para fazer contas com BigDecimal não dá para usar os sinais de “+”, “-” etc. Você precisa olhar a documentação.

http://docs.oracle.com/javase/6/docs/api/java/math/BigDecimal.html

P

Vou dar uma lida nesse documento, mas podemos testar com double

Criado 13 de agosto de 2012
Ultima resposta 13 de ago. de 2012
Respostas 9
Participantes 3