Erros com a classe BigDecimal

9 respostas Resolvido
BeatrizCastro

Sou inicante no java e preciso fazer um programinha que simule operaçoes de uma maquina de café.Estava utilizando o tipo primitivo double para trabalhar com valores,porem este estava dando erros com o trabalho de casas decimais.Entao comecei a usar a classe BigDecimal.Terminei o codigo e nao mostra nenhum erro no codigo ,mas quando executo no eclipse mostra isso:

Exception in thread “main” java.lang.NumberFormatException
at java.math.BigDecimal.(Unknown Source)
at java.math.BigDecimal.(Unknown Source)
at java.math.BigDecimal.(Unknown Source)

9 Respostas

Dragoon

Cade seu código?

BeatrizCastro
import java.math.BigDecimal;
public class Credito {
        BigDecimal troco;
	    BigDecimal moeda;
        BigDecimal somavalor=new BigDecimal ("");
	    Produto produto = new Produto();
           
    public BigDecimal getMoeda() {
		return  moeda;
	}
	public void setMoeda(BigDecimal moeda) {
		this.moeda = moeda;
	}
	
	public BigDecimal somavalor(BigDecimal moeda){
		somavalor=somavalor.add(this.moeda);
		return somavalor;
	}
	
	
	public void troco(){
		if  (somavalor.compareTo(produto.preco)> 0){
			System.out.println("AGUARDE PREPARAÇAO....");
			System.out.println("PEGUE SEU PRODUTO");
			troco=(somavalor.subtract(produto.preco)); 
			System.out.println("TROCO: "+ troco);
		}
		else if (somavalor == produto.preco){
			System.out.println("AGUARDE PREPARAÇAO....");
			System.out.println("PEGUE SEU PRODUTO");
			troco = troco.add(new BigDecimal(0));
		}
		else if(somavalor.compareTo(produto.preco)<0){
			System.out.println("SALDO INSUFICIENTE");
		}
	
	}
}
BeatrizCastro

essa é a classe que criei onde ficam as operaçoes com entrada de moeda e soma dos creditos

BeatrizCastro
import java.util.Locale;
import java.util.Scanner;
import java.math.BigDecimal;;
public class Main {

	public static void main(String[] args) {
		
		Credito credito = new Credito () ;
		Produto produto= new Produto ();
		
		System.out.println("INSERIR MOEDA");
		Scanner rec= new Scanner (System.in);
		rec.useLocale(Locale.US);
        credito.setMoeda(rec.nextBigDecimal());   
        
        credito.somavalor(credito.getMoeda());
        
        System.out.println("CREDITO: " + credito.somavalor);
        
        produto.exibirprodutos();
        
        System.out.println("CODIGO DO PRODUTO:");
        produto.setCodigo(rec.nextInt());
       
       produto.escolherproduto();
  	 
       System.out.println("PRODUTO:"+ produto.nome);
       System.out.println("PRECO:"+ produto.preco);
	
       credito.troco();
      
	
	}

}

Esse é o main

BeatrizCastro
import java.math.BigDecimal;
public class Produto {
	
	 
	 int codigo=0;
	 String nome;
	 BigDecimal preco = new BigDecimal("") ;
	
	 public int getCodigo() {
		return codigo;
	}
	public void setCodigo(int codigo) {
		this.codigo = codigo;
	}
	
	public void exibirprodutos(){
		System.out.println("CAFE EXPRESSO(1)------0,20");
		System.out.println("CAFE LONGO(2)---------0,20");
		System.out.println("CAFE PINGADO(3)-------0,70");
		System.out.println("CAPPUCCINO(4)---------0,70");
		System.out.println("MOCACCINO(5)----------0,70");
		System.out.println("CHOCOLATE(6)----------0,70");
		System.out.println("LEITE(7)--------------0,70");
		System.out.println("AGUA QUENTE(8)--------0,10");
		System.out.println();
		System.out.println();
	}
	
	public void escolherproduto(){
		
		switch(codigo){
	  	 case 1:
	  		 nome="CAFE EXPRESSO";
	  		 preco= new BigDecimal("0.20");
	  		 break;
	  	 case 2:
	  		 nome="CAFE LONGO";
	  		preco= new BigDecimal("0.20");
	  		 break;
	  	 case 3:
	  		 nome="CAFE PINGADO";
	  		preco= new BigDecimal("0.70");
	  		 break;
	  	case 4:
	  		 nome="CAPPUCCINO";
	  		 preco= new BigDecimal("0.70");
	  		 break;
	  	case 5:
	  		 nome="MOCACCINO";
	  		 preco= new BigDecimal("0.70");
	  		 break;
	  	case 6:
	  		 nome="CHOCOLATE";
	  		 preco= new BigDecimal("0.70");
	  		 break;
	  	case 7:
	  		 nome="LEITE";
	  		 preco= new BigDecimal("0.70");
	  		 break;
	  	case 8:
	  		 nome="AGUA QUENTE";
	  		 preco= new BigDecimal("0.10");
	  		 break;
	  	default:
	  		 System.out.println("CODIGO DE PRODUTO INVALIDO");
	  	 }
	}

Essa é uma outra classe para escolher o produto atribuir o preço

Dragoon
Solucao aceita

Na sua Classe Credito tem um erro:

Ta assim:

private BigDecimal somavalor = new BigDecimal("");

troque para:

private BigDecimal somavalor = new BigDecimal(BigInteger.ZERO);

ou

private BigDecimal somavalor = BigDecimal.ZERO;

O valor não pode ser uma String (""). Você até pode passar um String desde que o valor seja um número (Inteiro, Duplo ou com Virgula)

BeatrizCastro

Muito Obrigada :relaxed:

esmiralha

@Dragoon, sua resposta está correta, mas acho que vale esclarecer que o valor passado no construtor pode ser uma String desde que essa String seja conversível em um número. Ex.: “0.0” , “123”

Dragoon

Valeu por lembrar, já editada e acrescentado esse item!

Criado 25 de julho de 2016
Ultima resposta 26 de jul. de 2016
Respostas 9
Participantes 3