请看下例方法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);
}
}}
* 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);
}
}}
int y=0;
static void Main(string[] args)//定义一主程序带字数数组函数main
{
int y=0;
这个是main方法带参数的,lz可是在命令行下执行该文件
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
满意请给分,谢谢
int y = xxx;
int x = int.Parse(args[0]);
//方法1 顺序多个单if() <执行语句>句,易读但效率低,
//且X要考虑各种情况又不能相
....
{
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;
则会不报错;
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;
看了那么多人在那讲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
结贴,给分吧。o(∩_∩)o...哈哈
if (x == 0) y = 0;
if (x > 0) y = 1;
赋初值,
终于理解c#编译时对变量初始化一些规律,多谢!给各位加分,皆大欢喜