while(flag==false){
loc=Collections.min(sticks);
result[k++]=sticks.size();
sticks.removeIf(f -> (f==loc));
sticks.replaceAll(g ->(g-loc));
}
解决方案.java:24:错误:从 lambda 表达式引用的局部变量必须是最终变量或实际上是最终变量
sticks.removeIf(f -> (f==loc));
Solution.java:25:错误:从lambda表达式引用的局部变量必须是final或有效的final
sticks.replaceAll(g ->(g-loc));
你必须确保“loc”变量在声明后不会改变。
这将工作:
while(flag==false){
int loc=Collections.min(sticks);
result[k++]=sticks.size();
sticks.removeIf(f -> (f==loc));
sticks.replaceAll(g ->(g-loc));
}
这不会:
int loc = -1;
while(flag==false){
loc=Collections.min(sticks);
result[k++]=sticks.size();
sticks.removeIf(f -> (f==loc));
sticks.replaceAll(g ->(g-loc));
}
编译器不知道lambda何时执行,因此它需要能够在编译时知道如何解析所有变量。
在第一种情况下,loc变量只被赋值一次,所以编译器可以用它来链接。在第二种情况下,同一个loc变量被赋值多次,所以编译器无法编译lambda函数。
顺便说一下,我搜索了一下这种情况,我认为我没有使用数组索引或者错误地使用了错误的指针。另外,我在这里看到了同样的问题,但我想知道为什么代码不能工作,然后自己解决这个问题。非常感谢大家的帮助。
启动错误 ApplicationContext.若要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2019-10-17 15:44:43.968错误10460--[main]O.S.Boot.SpringApplication:应用程序运行失败 我的pom.xml:
这是我的密码。数据库名为socapa。 当我运行项目时,出现下面的错误。 Illumb\Database\QueryException SQLSTATE[42000]:语法错误或访问冲突:1055'socapa。联络。“FirstName”不在组中(SQL:选择,,联系人ID,,课程ID,注册,城市,<代码>状态,<代码>国家,<代码>CampusName,<代码>程序名,<代码>会话ID,<代码
我是Springboot的新手,我通过Sping的教程和“https://spring.io/guides”指南来学习。 现在我试图理解并重做教程:“使用MySQL访问数据” 不幸的是,我在Mavenbuild期间出错: 启动ApplicationContext时出错。要显示自动配置报告,请在启用“调试”的情况下重新运行应用程序。2017-12-07 10:26:42.708错误8100---[m
问题内容: 我试图通过执行程序和可运行程序并行执行100个任务,该任务需要使用循环变量: 我在“我”的语气中a不休- 据我所知,由于每次迭代都会更改循环变量,因此无法使其成为最终变量或有效地成为最终变量。我找到了一个简单的解决方法, 在我看来,这并不是最有效的解决方案,因为每次迭代都要声明一个新变量。有更好的方法吗? 问题答案: 有更好的方法吗? 我对此表示怀疑。您的解决方案对我来说看起来不错,但