首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对数组中的每个对象调用方法?

问如何对数组中的每个对象调用方法?
EN

Stack Overflow用户
提问于 2016-09-24 22:11:47
回答 1查看 33关注 0票数 2

我的完整代码要点,31行

我正在尝试转换双-> BigDecimal,然后调用存储在数组中的每个BigDecimal对象上的setScale方法。

代码语言:javascript
复制
    // 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函数。

数组中的对象是否未在第二个for循环中被修改或保存?

有答案的更新和调整-建议:

基于Hovercraft的回答,我在这里重写了我的最后一段代码,以便:

代码语言:javascript
复制
    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);
    }

这正是我想要的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-24 22:14:06

与BigDecimal类似的字符串是不可变的,因此只对BigDecimal对象调用setScale(...)就不会对同一个对象产生任何影响。对于要设置的标度,必须将结果重新赋值给BigDecimal变量。为此,我不使用for-each循环,而是使用For循环:

代码语言:javascript
复制
for (int i = 0; i < ret.length; i++) {
   ret[i] = ret[i].setScale(2, RoundingMode.FLOOR);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39681419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档