2016-09-24 40 views
2

Gist of my full code, 31 lines如何在数组内的每个对象上调用方法?

我想转换双打 - > BigDecimal然后调用存储在数组内的每个BigDecimal对象的setScale方法。

// convert double variables to BigDecimal inside of new BigDecimal array 
    BigDecimal[] ret = new BigDecimal[]{ 
     new BigDecimal(area), 
     new BigDecimal(theta), 
     new BigDecimal(x), 
     new BigDecimal(y) 
    }; 
    // setScale on each object 
    for (BigDecimal val: ret) { 
     val.setScale(2, RoundingMode.FLOOR); 
    } 

但是,当我打印出来,很明显的setScale函数没有叫上任何物体,当我以后再打印出每一个。

数组中的对象没有被突变或保存在2nd for循环中吗?


更新&调整与答案,咨询:

基于气垫船的回答我改写了我的代码最后一位在这里:

double[] vals = new double[]{area, theta, x, y}; 
    BigDecimal[] ret = new BigDecimal[vals.length]; 
    for (int i = 0; i < vals.length; i++) { 
     ret[i] = new BigDecimal(vals[i]).setScale(2, RoundingMode.FLOOR); 
    } 

这不正是我想要的。

回答

2

BigDecimal like String是不可变的,所以只需在BigDecimal 对象上调用setScale(...)对同一个对象没有影响。对于要设置的比例尺,您必须将结果重新分配给BigDecimal变量。为此,我不会使用for-each循环,而是使用for循环:

for (int i = 0; i < ret.length; i++) { 
    ret[i] = ret[i].setScale(2, RoundingMode.FLOOR); 
} 
相关问题