我有一个Double[] foo
,我需要转换数组中的每个元素:
我试过
for (Double p : foo){
p = p * m + o;
}
其中m
和o
是缩放因子。我也试过
for (Double p : foo){
p *= m;
p += o;
}
但这些都不起作用。我究竟做错了什么?我认为所有非原语都是Java中的引用。
答案 0 :(得分:10)
您无法使用增强的for循环更改数组值,只能迭代它们。
尝试正常的for循环,看看会发生什么:)
答案 1 :(得分:6)
Java的 autoboxing 和拆箱正在阻碍这里。在算术运算之前,基本上p
未装箱到原语,然后 autoboxed 到包装器类型。这样做的结果是获取了值副本,因此修改对原始容器元素没有影响。
您需要以正常方式重新编码循环
for (int i = 0; i < foo.length; ++i){
foo[i] = foo[i] * m + o;
}