2015-04-12 79 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;