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)
importjava.math.BigDecimal;publicclassCredito{BigDecimaltroco;BigDecimalmoeda;BigDecimalsomavalor=newBigDecimal("");Produtoproduto=newProduto();publicBigDecimalgetMoeda(){returnmoeda;}publicvoidsetMoeda(BigDecimalmoeda){this.moeda=moeda;}publicBigDecimalsomavalor(BigDecimalmoeda){somavalor=somavalor.add(this.moeda);returnsomavalor;}publicvoidtroco(){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);}elseif(somavalor==produto.preco){System.out.println("AGUARDE PREPARAÇAO....");System.out.println("PEGUE SEU PRODUTO");troco=troco.add(newBigDecimal(0));}elseif(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
importjava.util.Locale;importjava.util.Scanner;importjava.math.BigDecimal;;publicclassMain{publicstaticvoidmain(String[]args){Creditocredito=newCredito();Produtoproduto=newProduto();System.out.println("INSERIR MOEDA");Scannerrec=newScanner(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();}}
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
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!