Java:为什么编译器在这里抱怨?

时间:2016-01-17 12:10:29

标签: java for-loop while-loop compiler-errors compiler-warnings

  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 5specialFuncStart可能尚未初始化?字符串是最终的并且是固定的,因此for循环将始终运行。编译器不知道或我错过了什么吗?我了解初始化specialFuncStart = -1;是如何修复它,但为什么?

3 个答案:

答案 0 :(得分:2)

宣布但你没有初始化它。您需要为其设置一个值:

int specialFuncStart; // declare
specialFuncStart = 0; // initialize

int specialFuncStart = 0; // both

您的编译器认为有时specialFuncStart不会被初始化,因为for循环

答案 1 :(得分:0)

编译器显示错误,因为你在for循环中初始化了specialFuncStart变量而且compileris不确定它是否执行因为 in for-each循环数组大小可以是0,这使得它不能执行。

因此,您可以在下面循环之前启动它,以防止错误

specialFuncStart = 0;

答案 2 :(得分:0)

在while循环中,检查带有变量的条件,该变量在另一个循环的范围内初始化。编译器不会让你这样做,考虑到它可能无法正确初始化,循环可能无法运行或可能提前中断的情况,即使从我们的观点明确表示事件将完美发生。 问题在于范围,Java是一种强大的强类型语言,它的编译器会检查每种可能性以防止错误发生。