循环范围不起作用

时间:2014-10-23 14:21:56

标签: java

我有一个Double[] foo,我需要转换数组中的每个元素:

我试过

for (Double p : foo){
    p = p * m + o;
}

其中mo是缩放因子。我也试过

for (Double p : foo){
    p *= m;
    p += o;
}

但这些都不起作用。我究竟做错了什么?我认为所有非原语都是Java中的引用。

2 个答案:

答案 0 :(得分:10)

您无法使用增强的for循环更改数组值,只能迭代它们。

尝试正常的for循环,看看会发生什么:)

答案 1 :(得分:6)

Java的 autoboxing 拆箱正在阻碍这里。在算术运算之前,基本上p 未装箱到原语,然后 autoboxed 到包装器类型。这样做的结果是获取了值副本,因此修改对原始容器元素没有影响。

您需要以正常方式重新编码循环

for (int i = 0; i < foo.length; ++i){
    foo[i] = foo[i] * m + o;
}