循环范围不起作用

P45*_*ent 3 java

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

我试过了

for (Double p : foo){
    p = p * m + o;
}
Run Code Online (Sandbox Code Playgroud)

在哪里mo是缩放因子.我也试过了

for (Double p : foo){
    p *= m;
    p += o;
}
Run Code Online (Sandbox Code Playgroud)

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

Ant*_*igo 10

您不能使用增强的for循环更改数组值,只能遍历它们.

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


Bat*_*eba 6

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

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

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