【发布时间】:2020-09-12 23:55:43
【问题描述】:
while(flag==false){
loc=Collections.min(sticks);
result[k++]=sticks.size();
sticks.removeIf(f -> (f==loc));
sticks.replaceAll(g ->(g-loc));
}
Solution.java:24:错误:从 lambda 表达式引用的局部变量必须是最终的或有效的最终
sticks.removeIf(f -> (f==loc));
Solution.java:25:错误:从 lambda 表达式引用的局部变量必须是最终的或有效的最终
sticks.replaceAll(g ->(g-loc));
【问题讨论】:
-
在循环内定义 loc。
-
你的edit刚刚完全改变了错误信息。
-
loc变量的类型是什么?
-
loc 是一个被初始化为 0 的整数。
-
你不应该写像
flag==false这样的表达式;惯用形式是! flag。但无论如何,由于flag在此循环中从未更改,但您反复从没有无限容量的集合中删除,此循环条件看起来像是一个等待发生的错误。如果这段代码应该一直运行到列表为空,那么sticks.replaceAll(g ->(g-loc));就完全过时了。即使您打算使用非空集合退出循环,在最后一个loc结束时执行一次sticks.replaceAll(g -> g-loc);就足够了。
标签: java list loops arraylist methods