2016-01-17 129 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是一種健壯且強類型的語言,它的編譯器會檢查每種可能性以防止錯誤發生。

相關問題