2015-04-12 150 views
0

下面是一個簡單的程序,但我不知道爲什麼在編譯時會顯示一個錯誤:錯誤:變量c可能尚未初始化

class TwoControl { 
public statis void main (String args[]) { 
    int num,A,C; 
    int B=5; 
    num = 1; 
    A=5; 
    if(num<A) 
    C=A+B; 
    System.out.print("C Value " + C); 
    } 
} 

可能有不同的方式,使這個程序運行,但不知道爲什麼它不適用於上述編碼形式。

當我嘗試編譯它,我得到的錯誤

Error : Variable C might not have been initialized System.out.print("C Value " + C); 

是不是當編譯器編譯代碼,它不會驗證控制語句?

在上面的例子中,如果條件爲真,那麼值C被初始化或定義,然後編譯器爲否定情況拋出錯誤?

+0

當'A> = num'時會發生什麼? –

+1

除了下面的答案,請按照Java命名約定,也'靜態'是不正確的'靜態' – silentprogrammer

回答

2

你的變量C僅在條件中初始化修復:

if(num<A) 
    C=A+B; 

因此,如果條件false,C是永遠初始化。

要麼有一個else子句或用默認值初始化,即:

int num,A,C = 0; 
2

如果num> = A(條件的反義),C將保持未初始化狀態。

您可以通過定義下,用默認值,例如int C = 0

0

添加到什麼大利說,如果你讓C爲一類級別的變量,那麼編譯器將0默認情況下, ,但由於它是本地方法,所以需要初始化它:

class TwoControl { 
    static int C; 
public statis void main (String args[]) { 
..... 

這個編譯完美。

+0

因此(作爲非Java用戶)'statis'是正確的? – usr2564301

0

初始化c當declare.it

Int num,A,C = 0; 

或其他放一對,如果分配

if(num<A) 
    C=A+B; 
    else 
    C = 0; 
    System.out.print("C Value " + C); 

}

0

在你的代碼段之前,變量c如果條件num> A爲真,那麼java編譯器在編譯時無法理解是否num> A。然後編譯器給你的建議是C不能被使用,因爲它不是被聲明的,而是它被聲明的。你可以通過這種方式解決它初始化C:

int num,A,C=0;