当前位置: 首页 > 知识库问答 >
问题:

我怎么才能绕过这个?[副本]

何琨
2023-03-14

我有这段代码,但我不明白为什么会出现以下错误:

local variables referenced from a lambda expression must be final or effectively final
    public int firstMissingPositive(int[] nums) {

        int k;

        for (int i = 1;; i++) {
            if (!Arrays.stream(nums).anyMatch(x -> x != i)) {
                k = i;
                break;
            }
        }
        return k;
    }

共有1个答案

唐弘益
2023-03-14

因为i实际上不是final(请参见i++),而且必须在lambda表达式中使用它。

通过在循环中分配一个新的局部变量,可以很容易地修复:

public int firstMissingPositive(int[] nums) {
    int k;
    for (int i = 1;; i++) {
        final int j = i;
        if (! Arrays.stream(nums).anyMatch(x -> x != j)) {
            k = j;
            break;
        }
    }
    return k;
}
 类似资料: