这是我的第一个Java应用程序。我正在尝试创建产品(键)及其价格(值)的地图。文档说我不能用双打来赚钱,所以我必须使用BigDecimal。关于如何在我的方法和地图中使用BigDecimal,我完全陷入困境。
我只有一种方法可以将产品添加到地图中,而我正试图传递BigDecimal Price。它不会编译,因为它看到一个字符串而不是BigDecimal,这让我感到困惑,因为BigDecimal接受字符串作为参数(例如BigDecimal示例= 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();
}
}
答案 0 :(得分:5)
BigDecimal
有一个带String
的构造函数的事实并不意味着可以将String
传递给采用BigDecimal
的方法。
这个问题有两种解决方案:
addProduct
的第二个参数的类型更改为String
- 代码将继续编译,因为您在方法中构造BigDecimal
,或者< / LI>
new BigDecimal
获取第二个参数 - 调用内容如下:register.addProduct("Coffee", new BigDecimal("1.25"));
第一种方法的变化如下:
public HashMap<String, BigDecimal> addProduct(String product, String price) {
// This is the only change -------------------------------^^^^^^
BigDecimal productPrice = new BigDecimal(price);
productMap.put(product, productPrice);
return productMap;
}
第二种方法的变化如下:
public HashMap<String, BigDecimal> addProduct(String product, BigDecimal price) {
// No need to create productPrice, because price is BigDecimal
productMap.put(product, price);
return productMap;
}