我有以下代码,它正确地拒绝编译并出现错误在封闭范围内定义的局部变量numberArray必须是最终的或实际上是最终的
InputReader reader = new InputReader(System.in);
int numInputs = reader.nextInt();
int[] numberArray = new int[numInputs];
IntStream.range(0, numInputs).forEach(i -> {
numberArray[i] = reader.nextInt();
});
但是,这段代码可以编译并正常工作,尽管在这里我基本上也做同样的事情,在lambda中修改了 inputArray 。
public int[] reverse(int[] inputArray) {
IntStream.range(0, inputArray.length/2).forEach(i-> {
int temp = inputArray[i];
inputArray[i] = inputArray[inputArray.length-1-i];
inputArray[inputArray.length-1-i] = temp;
});
return inputArray;
}
知道为什么存在这种差异吗?
答案 0 :(得分:2)
请确保循环后没有更改numberArray。在那种情况下,它不会被认为是有效的最终解决方案。
numberArray = ...