2016-01-17 135 views
4
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;是如何解决它,但为什么?Java:为什么编译器会在这里抱怨?

+1

变量specialFuncStar声明在哪里? –

+1

为该声明添加一个= 0。由于变量只在for循环范围中初始化,因此编译器认为for循环可能不会始终运行,并且变量的初始化可能不会始终运行。 –

回答

2

申报但你没有初始化它。您需要将值设置为它:

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

int specialFuncStart = 0; // both 

你的编译器认为,有时specialFuncStart不会因为for循环不不得不执行初始化。

+0

即使代码明确指出for循环将运行?它为什么这样做? –

+0

@JohanZ。是。不幸的是,编译器并不那么聪明。它在编译时无法注意到。尝试删除“for”循环并查看错误将被删除。 – Idos

+0

这不是关于编译器的智能。编译器可以很容易地看到循环始终运行。只是编译器有点懒惰,而不是检查每个案例,它只是说“初始化变量”是安全的。 – Kayaman

0

编译器显示错误,因为您在for循环中初始化specialFuncStart变量,并且compileris不确定它是否执行或者不是因为每个循环数组大小可能为0,导致它不执行。

所以,你之前有initailise它循环像下面,防止错误

specialFuncStart = 0;

0

在while循环您检查与被另一个循环的范围内初始化的变量的条件。编译器不会让你这样做,考虑到它可能无法正确初始化的情况,即使从我们的角度来看,事件将会完美地发生,该循环可能无法运行或可能会提前中断。 问题在于作用域,Java是一种健壮且强类型的语言,它的编译器会检查每种可能性以防止错误发生。

相关问题