请看下例方法1"//此行老提示输出没有赋值变量y",有什么问题/*本例:   -1 (x<0)
 *       y=0  (x=0)
 *          1 (x>0)
 */
using System;
using System.Collections.Generic;
using System.Text;
namespace 程序结构
{
    class if1
    {
        static void  Main(string[] args)//定义一主程序带字数数组函数main
        {
            int y;
            int x = int.Parse(args[0]);
   //方法1 顺序多个单if()<执行语句>句,易读但效率低,
            //且X要考虑各种情况又不能相互包含(不然会出错)
            if (x < 0)  y = -1;
            if (x == 0) y = 0;
            if (x > 0) y = 1;
           System.Console.WriteLine("方法2,复合if:当x={0}时,y={1}", x, y); //此行老提示输出没有赋值变量y
           
   /*方法2 复合if句1,最常用.嵌套在else 后。
    * 
            IF ()<执行语句> 
    *        
    *       ELSE IF( ) <执行语句>
    *        
    *            else if句);*/             
            if(x<0) y=-1;
            else if(x==0) y=0;
                 else y=1;
            System.Console.WriteLine("方法2,复合if:当x={0}时,y={1}", x, y);    /*方法3 复合if句2(与上面反逻辑判断条件),嵌套在if 后
     * 
                     *      if(...)
                                if(...)
                     *             if( )  
                     *             .....
                     *             else <执行语句>
             
                                else <执行语句>
                             else  <执行语句> 
                    复合句*/            if (x >= 0)
                if (x > 0) y = 1;
                else y = 0;
            else y = -1;
            System.Console.WriteLine("方法3,复合if2:当x={0}时,y={1}", x, y);
        }  
    }}

解决方案 »

  1.   

    没有赋初值
    int y=0; 
      

  2.   

    错误 1 使用了未赋值的局部变量“y”
            static void Main(string[] args)//定义一主程序带字数数组函数main
            {
                int y=0;
      

  3.   

      int x = int.Parse(args[0]); 
    这个是main方法带参数的,lz可是在命令行下执行该文件
      

  4.   

    x是空,if不成立都,所以y也是空,所以报那错你跑的时候要传参数进去,传args[0]进去
      

  5.   

    因为你的y没有显式初始化,就是说你没有初始化y的值就要使用y的值。在int y;那行将y初始化。在程序中,如果赋值语句在条件语句下,编译器会认为这个变量有可能没有赋值,所以会报错。修改如下:
    class if1 
        { 
            static void  Main(string[] args)//定义一主程序带字数数组函数main 
            { 
                int y = -1000;     //此行将y初始化
                int x = int.Parse(args[0]); 
      //方法1 顺序多个单if() <执行语句>句,易读但效率低, 
                //且X要考虑各种情况又不能相互包含(不然会出错) 
                if (x < 0)  y = -1; 
                if (x == 0) y = 0; 
                if (x > 0) y = 1; 
              System.Console.WriteLine("方法2,复合if:当x={0}时,y={1}", x, y); //此行老提示输出没有赋值变量y 
    满意请给分,谢谢
      

  6.   

    y必须在if块外被赋值,不然编译通不过
     int y = xxx; 
    int x = int.Parse(args[0]); 
      //方法1 顺序多个单if() <执行语句>句,易读但效率低, 
                //且X要考虑各种情况又不能相
    ....
      

  7.   

            public int f(int c)
            {
                int a;
                int b = 3;
                if (b > c)
                {
                    a = 1;
                }
                else
                {
                    a = 2;
                }
                return a;
            }
    这个是可以编译通过的,所以对于你的  
                 if (x < 0)  y = -1; 
                if (x == 0) y = 0; 
                if (x > 0) y = 1; 
    如果改成if (x < 0)  y = -1; 
    else if (x == 0) y = 0; 
    else y = 1; 
    则会不报错;
      

  8.   

    各位大师有劳了.按你们说是因为y没有赋初值,但是如果我注解"System.Console.WriteLine("方法2,复合if:当x={0}时,y={1}", x, y); "此行代码,后面2个例子执行无问题,又作何解?
      

  9.   

    各位大师有劳了.按你们说是因为y没有赋初值,但是如果我注解"System.Console.WriteLine("方法2,复合if:当x={0}时,y={1}", x, y); "此行代码,后面2个例子执行无问题,又作何解?我调时已输入参数10,除方法1输出句有问题,方法2,方法3都无问题,均输出1.
      

  10.   

      这个对的  int 
      

  11.   

        按你说是因为y没有赋初值,但是如果我注解"System.Console.WriteLine("方法2,复合if:当x={0}时,y={1}", x, y); "此行代码,后面2个例子执行无问题,又作何解?我调时已输入参数10,除方法1输出句有问题,方法2,方法3都无问题,均输出1.
      

  12.   

    因为通过去
    if (x < 0)
    y = -1;
    else if (x < 0)
    y = 0;
    else
    y = 1;
    能判断出y一定会被赋值,所以后面的System.Console.WriteLine不会提示出错而
    C#不会组合判断下面的条件,编译时就认为i没有被赋值,但其实y还是会被赋值的
    if (x < 0)  y = -1;
    if (x == 0) y = 0;
    if (x > 0) y = 1; 
      

  13.   

    有你这么说话的么? 你很牛?
      看了那么多人在那讲y没有初使值。  只有几个人说在点子上了
        虽然是没有初使值  但真正的问题int y;         //这里的Y的确没有给值  
    int x = int.Parse(args[0]);      //关键在这里!   这里的x是没有初值的  它的值由main传递进来 需要在命令提示符下运行 并且把参数传进去! 这样x才有值   下面才可以进行判断            if (x < 0)  y = -1;     //但此处却给了值
                if (x == 0) y = 0; 
                if (x > 0) y = 1; 
              System.Console.WriteLine("方法2,复合if:当x={0}时,y={1}", x, y); //此行老提示输出没有赋值变量y 
      

  14.   

    因为你上面只有if 所以可能出现一个也不满足的时候,那样y就是没有赋值了。
    结贴,给分吧。o(∩_∩)o...哈哈
      

  15.   

    也就是说 编译时y不能通过条件句if (x < 0)  y = -1; 
                if (x == 0) y = 0; 
                if (x > 0) y = 1; 
     赋初值,
    终于理解c#编译时对变量初始化一些规律,多谢!给各位加分,皆大欢喜