Java: 为什么编译器会在这里报错?
Java: Why does the compiler complain here?
0 int specialFuncStart;
1 String[] specialFunctions= {"sum","ddx","integral"};
2 for(String element: specialFunctions){
3 specialFuncStart = finalMath.lastIndexOf("sum");
4 }
5 while (specialFuncStart != -1) { code }
为什么line 5
说specialFuncStart
可能没有初始化?字符串是最终的和固定的,所以 for 循环总是 运行。编译器不知道还是我遗漏了什么?我知道初始化 specialFuncStart = -1;
是如何修复它的,但为什么?
您声明它但没有初始化它。您需要为其设置一个值:
int specialFuncStart; // declare
specialFuncStart = 0; // initialize
int specialFuncStart = 0; // both
您的编译器认为有时 specialFuncStart
不会被初始化,因为 for
循环 不必 执行。
编译器显示错误,因为您在 for 循环中初始化了特殊的 FuncStart 变量,编译器不确定它是否执行,因为
for-each 循环数组大小可以为 0,这使得它不执行。
所以你在 for 循环之前初始化它以防止错误
specialFuncStart = 0;
在 while 循环中,您使用在另一个循环范围内初始化的变量检查条件。考虑到它可能无法正确初始化、循环可能不会 运行 或者它可能会提前中断等情况,编译器不会让您这样做,即使从我们的角度来看事件会完美发生也是如此。
问题出在作用域上,Java 是一种健壮且强类型的语言,它的编译器会检查每一种可能性以防止发生意外。
0 int specialFuncStart;
1 String[] specialFunctions= {"sum","ddx","integral"};
2 for(String element: specialFunctions){
3 specialFuncStart = finalMath.lastIndexOf("sum");
4 }
5 while (specialFuncStart != -1) { code }
为什么line 5
说specialFuncStart
可能没有初始化?字符串是最终的和固定的,所以 for 循环总是 运行。编译器不知道还是我遗漏了什么?我知道初始化 specialFuncStart = -1;
是如何修复它的,但为什么?
您声明它但没有初始化它。您需要为其设置一个值:
int specialFuncStart; // declare
specialFuncStart = 0; // initialize
int specialFuncStart = 0; // both
您的编译器认为有时 specialFuncStart
不会被初始化,因为 for
循环 不必 执行。
编译器显示错误,因为您在 for 循环中初始化了特殊的 FuncStart 变量,编译器不确定它是否执行,因为 for-each 循环数组大小可以为 0,这使得它不执行。
所以你在 for 循环之前初始化它以防止错误
specialFuncStart = 0;
在 while 循环中,您使用在另一个循环范围内初始化的变量检查条件。考虑到它可能无法正确初始化、循环可能不会 运行 或者它可能会提前中断等情况,编译器不会让您这样做,即使从我们的角度来看事件会完美发生也是如此。 问题出在作用域上,Java 是一种健壮且强类型的语言,它的编译器会检查每一种可能性以防止发生意外。