BigDecimal Array的Setter方法

时间:2015-03-12 15:41:47

标签: java arrays bigdecimal

我想为BigDecimal数组创建一个setter方法,但是我无法正确地为它分配值。我希望我的数组至少包含一个“零”元素或平均时间没有。

public void setAddends(BigDecimal addends[]){
    addends[] = BigDecimal.ZERO;
}

2 个答案:

答案 0 :(得分:1)

BigDecimal addends[] = new BigDecimal [10]; 

...

public void setAddends(BigDecimal addends[]){
addends[0] = BigDecimal.ZERO;
}

答案 1 :(得分:0)

如果要对输入参数设置一些约束,则应该要求方法的调用者提供有效参数,而不是在方法内更改它。如果参数无效,请考虑抛出IllegalArgumentException

据我所知,您希望数组包含至少一个零或仅包含空值:

public void setAddends(BigDecimal[] addends) {
    if (numberOfNonNullsIn(addends) != 0 && numberOfZerosIn(addends) == 0) {
        throw new IllegalArgumentException("addends should either contain at least one zero or contain nulls only");
    }

    // ...
}

private long numberOfZerosIn(BigDecimal[] addends) {
    return Arrays.stream(addends).filter(a -> a != null && a.compareTo(BigDecimal.ZERO) == 0).count();
}

private long numberOfNonNullsIn(BigDecimal[] addends) {
    return Arrays.stream(addends).filter(a -> a != null).count();
}