这是我的第一个
Java应用程序.我正在尝试创建产品(键)及其价格(值)的地图.文档说我不能用双打来赚钱,所以我必须使用BigDecimal.关于如何在我的方法和地图中使用BigDecimal,我完全陷入困境.
我只有一种方法可以将产品添加到地图中,而我正试图传递BigDecimal Price.它不会编译,因为它看到一个字符串而不是BigDecimal,这让我感到困惑,因为BigDecimal接受字符串作为参数(例如BigDecimal example = new BigDecimal(“2.50”))
我还想创建一个方法,将总价格增加,但你不能用字符串来做.关于BigDecimal的文档非常混乱,谷歌也没有多大帮助.有人可以解释一下BigDecimal以及如何使用它吗?
到目前为止这是我的代码:
注册课程:
import java.math.BigDecimal; import java.util.HashMap; import java.util.Map; public class Register { private HashMap<String,BigDecimal> productMap = new HashMap<>(); public void printProductMap() { for(Map.Entry<String,BigDecimal> entry : productMap.entrySet()) { String key = entry.getKey(); BigDecimal value = entry.getValue(); System.out.println(key + " " + value); } } public HashMap<String,BigDecimal> addProduct(String product,BigDecimal price) { BigDecimal productPrice = new BigDecimal(price); productMap.put(product,productPrice); return productMap; } }
主要课程:
public class Main { public static void main(String[] args) { Register register = new Register(); register.addProduct("Coffee","1.25"); register.addProduct("Cappuccino","1.50"); register.printProductMap(); } }
解决方法
BigDecimal有一个带String的构造函数这一事实并不意味着将String传递给一个采用BigDecimal的方法.
这个问题有两种解决方案:
>将addProduct的第二个参数的类型更改为String – 代码将继续编译,因为您在方法内构造了BigDecimal,或者
>传递新的BigDecimal作为第二个参数 – 调用如下:register.addProduct(“Coffee”,new BigDecimal(“1.25”));
第一种方法的变化如下:
public HashMap<String,String price) { // This is the only change -------------------------------^^^^^^ BigDecimal productPrice = new BigDecimal(price); productMap.put(product,productPrice); return productMap; }
第二种方法的变化如下:
public HashMap<String,BigDecimal price) { // No need to create productPrice,because price is BigDecimal productMap.put(product,price); return productMap; }