有这样的一个循环:
public static int loop()
{
    int i=0;
    int test;
    while(i<10)
    {
         test = 1;
         i++;
    }
    return test;
}
编译之后出现的是:使用了未赋值的局部变量“test”,其他的语句没有错误,我使用do——while语句检测正常,这里的错误我就看不出来了,有高手能看出来这里的错误出在哪吗?怎么避免这样的错误?

解决方案 »

  1.   

    int   test=0;这样试试 
      

  2.   

    int test要赋一个初始值,随便多少。
      

  3.   

    public   static   int   loop() 

            int   i=0; 
            int   test; 
            while(i <10) 
            { 
                      test   =   1; 
                      i++; 
            } 
            return   test; 
    }
    ---------------
    int   test = 0; 
    --------------
    编译时无法确定是否能进循环,即无法判断是否给test赋值,所以有“使用了未赋值的局部变量“test””
    而do while是肯定能进循环的
      

  4.   

    6楼的回答我没有完全弄理解,为什么编译的时候不能够确定能否进入循环呢?给test赋初值了就一定能进入循环?其中的原理是什么,还请指点
      

  5.   

    编译器无法知道你的程序是否能执行循环体,你之后return test的时候使用了test,那么test必须要赋初值。给test赋不赋初值跟编译器知不知道程序是否执行循环体之间毫无关系。
      

  6.   

    while(i < 10)
    ...
    //编译时是不能确定i为多少,即不能确定i<10是否成立,也就不能确定是否能进while循环,只有运行时才能确定。
      

  7.   


    给test赋值了也不一定就进入循环,但test是有值的,这都没理解?
      

  8.   

    你自己设个断点在即时窗口里面取值看一下呢。
    不管是string还是int或是其它什么类型的,没有初始值它就是NULL,就是个object类型,你函数返回的是个int型,能一样嘛?
      

  9.   

    程序编译是不检测变量的具体值的。
    也就是说(i <10) 这个表达式,
    编译器不知道它的返回结果是true还是false,
    所以就会出现一种情况,循环执行不到,test
    也就不会赋值。
    而 do{...;test = 1;...}while(i<10)在编译时,编译器
    知道要先执行大括号之间的代码,然后再执行
    表达式(i<10),不管表达式返回结果如何,test
    已经赋过值了,因此,不会有错误。
      

  10.   

    这个我知道.  是因为do while 不管条件是不是成立  都会执行一次.