有这样的一个循环:
public static int loop()
{
int i=0;
int test;
while(i<10)
{
test = 1;
i++;
}
return test;
}
编译之后出现的是:使用了未赋值的局部变量“test”,其他的语句没有错误,我使用do——while语句检测正常,这里的错误我就看不出来了,有高手能看出来这里的错误出在哪吗?怎么避免这样的错误?
public static int loop()
{
int i=0;
int test;
while(i<10)
{
test = 1;
i++;
}
return test;
}
编译之后出现的是:使用了未赋值的局部变量“test”,其他的语句没有错误,我使用do——while语句检测正常,这里的错误我就看不出来了,有高手能看出来这里的错误出在哪吗?怎么避免这样的错误?
{
int i=0;
int test;
while(i <10)
{
test = 1;
i++;
}
return test;
}
---------------
int test = 0;
--------------
编译时无法确定是否能进循环,即无法判断是否给test赋值,所以有“使用了未赋值的局部变量“test””
而do while是肯定能进循环的
...
//编译时是不能确定i为多少,即不能确定i<10是否成立,也就不能确定是否能进while循环,只有运行时才能确定。
给test赋值了也不一定就进入循环,但test是有值的,这都没理解?
不管是string还是int或是其它什么类型的,没有初始值它就是NULL,就是个object类型,你函数返回的是个int型,能一样嘛?
也就是说(i <10) 这个表达式,
编译器不知道它的返回结果是true还是false,
所以就会出现一种情况,循环执行不到,test
也就不会赋值。
而 do{...;test = 1;...}while(i<10)在编译时,编译器
知道要先执行大括号之间的代码,然后再执行
表达式(i<10),不管表达式返回结果如何,test
已经赋过值了,因此,不会有错误。