增强了循环遍历Java

时间:2017-05-05 20:15:28

标签: java for-loop reference

我目前正在阅读Downey的Think Java,它最近推出了增强型for循环。有人提到增强的for循环在遍历数组时不考虑元素索引。我认为这不会影响以下方法的工作:

    public static double[] powArray(double[] a) {
        for (double value : a) {
            value = Math.pow(value, 2.0);
        }
        return a;
    }                 

然而,似乎它确实(它所属的其余代码似乎很好)。需要注意的是,当我运行以下命令时,此方法最终会返回相同的数组:

    System.out.println(Arrays.toString(powArray(a)));

我想我无法理解这里的问题是否在于我如何处理增强的for循环或数组引用。 提前谢谢!

2 个答案:

答案 0 :(得分:4)

查看JLS Sec 14.14.2,它在数组中给出了增强for循环的等效形式:

df %>%
  group_by(game) %>%
  mutate(shot_number2 = row_number())
     

[相当于,如果for ( {VariableModifier} TargetType Identifier : Expression ) Statement 是数组类型]

Expression

因此,编译器将您的循环转换为如下所示:

T[] #a = Expression;
L1: L2: ... Lm:
for (int #i = 0; #i < #a.length; #i++) {
    {VariableModifier} TargetType Identifier = #a[#i];
    Statement
}

您正在调整double[] a = arr; for (int i = 0; i < a.length; i++) { double value = a[i]; value = Math.pow(value, 2.0); } ,但该值不会写回value(或arr,甚至)。

如果要修改数组元素,则必须明确使用基本的for循环:

a

答案 1 :(得分:0)

你应该回到数组或只是创建新数组,将所有pow值存储到它并返回该数组。