C#使用了未赋值的局部变量j

我写了两个函数判断关系的性质
public int Beself()//判断是否是自反,自反就返回OK()不是返回ERROR()
{
int i;
for (i =0; i < step; i++)
if (data[i,i] != 1) break;
if (i ==step) { return 1; }
else return 0;

}

public int Symmetry()//判断是否对称
{
int i;
int j;
for (i = 0; i<step; i++)
for (j = 0; j<step; j++)
if (data[i,j] != data[j,i])
break;
if (i == step + 1 && j == step + 1)
return 1;
else
return 0;

}

我的想法是通过在循环中改变i,j的值,然后通过最终的j或i的值判断关系的性质(返回0或1),第一个函数i成功得到值判断出关系性质,但第二个函数却出现了一个错误"使用了未赋值的局部变量“j”“,我不知道是怎么回事,按道理j在那个双重循环过程中赋值了,请问各位大神怎么回事呢...应该怎么写那个函数,分不多,但是我感激地心情不会少的,好的追分
这两个函数都是Martix类的函数,data是二维数组,是其中一个属性,初学C#,好多不懂..拜托各位了

如果单纯的for循环 不用特意去给j赋值 直接for(int j=0;j<x;j++) 就可以
但是 你的j是局部变量 而且 为什么i不会报出未赋值的错误 是因为 for (i = 0; i<step; i++)
和 if (i == step + 1 && j == step + 1) 在代码里面属于同级 在(i == step + 1 && j == step + 1) 里面使用i的时候程序可以默认i已经赋值了 而j在for (i = 0; i<step; i++)的循环体里面 和(i == step + 1 && j == step + 1) 不在同级 所以 j必然报出未赋值 而且编译都不能通过
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-12-12
"使用了未赋值的局部变量“j” 你这程序有这问题是必须的,除非你在.net 5.0里面有隐式实例化才不需要 在c#里面 3.5以上可以用var 去隐式声明一个变量,在你这个程序里面, public int Symmetry()//判断是否对称是一个新的方法,而 i j 只是 public int Beself()//判断是否是自反,自反就返回OK()不是返回ERROR()的局部变量,局部变量只能在函数体内调用,是不能被外部调调用的,嘿嘿,我没仔细看你写的程序是什么,因为我赶着回答问题,xx的要做百度任务,不过,你可以这样做,在函数体外面生命 Private int i ,j;如果在静态方法内使用就用 Private static int i ,j,好了,暂时先说这么多,有问题你再问

int i;
int j;
for (i = 0; i<step; i++)
for (j = 0; j<step; j++)
if (data[i,j] != data[j,i])
break;
if (i == step + 1 && j == step + 1)
return 1;
else
return 0;
刚才没在意看,然后扫了一眼,发现你这还有问题

{ for (i = 0; i<step; i++)
{ for (j = 0; j<step; j++)
{ if (data[i,j] != data[j,i])
break;}}}
if (i == step + 1 && j == step + 1)
return 1;
else
return 0;
我给你的这用大括号括起来了,你发现问题了不?这不会是你的本意吧?本回答被提问者采纳
第2个回答  2011-12-14
这个问题,我告诉你一个道理你就知道了,int是值类型,所以值类型的变量是按值传递,你声明的时候都没赋值,但你在那循环潜逃体内对其赋值了,因为字是值类型,所以你在那循环体类赋值了,其实它就开启了一个新的内存空间,不知道你明白了不,当这循环体结束后,它的生命周期也结束了,所以你下面再使用到j的时候,它就说未赋初值了,如果你的j是引用类型的变量,你在循环体内改变了j那接下来再使用j就不会出现未赋值错误了!如果不明白的话,你再找我
第3个回答  2011-12-12
给j一个初始值就行了.就这样: int j = 0;
第4个回答  2011-12-12
估计是因为变量在循环中的作用域问题,你把
if (i == step + 1 && j == step + 1) 这句去掉,如果能通,说明我的猜测不错。
没有具体测试,只是猜测。

(C#)错误提示:使用了未赋值的局部变量
因为你没有对那些变量赋值, 所以在编译的时候会报错. 可以在声明时先赋值空值.补充(2008-10-2 10:38:54)因为你的赋值语句在try块内. 而又包含catch块, 有可能在进入块第一句就引发了异常, 然后会跳转到catch块. 这样就相当于没有赋值. 所以在下面再引用这个变量的时候就会出现编译错误.补充(2008...

c# 报错 :使用了未赋值的局部变量
在C#中声明的变量,都要赋初始值,不然就会报错!

c# 出现“使用了未赋值的局部变量”
你那个 “xxx=0” 只是赋了一个初值,运行的时候如果另有赋值则按新赋的会计算,如果没有另赋值就按初始的值(本例是0)计算,而且C#要求变量一般都要赋初值的,数据类型的赋初值为0或其它,对象类型的赋初值为null或其它,你就形成一个赋初值的习惯就不会有错了,比如定义一个int i 之后随...

c#结构函数使用了未赋值的局部变量
static void Main(string[] args){ order myOrder=new order();Console.WriteLine("数量:");myOrder.unitCount = Convert.ToInt32(Console.ReadLine());Console.WriteLine("单价:");myOrder.unitCost = Convert.ToDouble(Console.ReadLine());Console.WriteLine(myOrder.Money());} 或者可以使用...

C#使用了未赋值的局部变量,如何赋值?
对于STRING类型的变量,最好的初始赋值是 string name1=null;string name2=null;而判断是否赋值最好是用 if (name1.length>1)判断,之后再输出比较好

C# 使用了未赋值的局部变量
首先,为了防止这种不必要的错误,初始化变量的时候,最好先赋个默认值,比如char A='';其次,这里会报错是这样的。你的变量A在for (int i = a - 1; i < a + 1; i++)循环体出现之前声明了,但是还没有初始化,此时直接调用A的话是会报错的,这个需要明白。然后return(A)出现在for (int...

C#实验显示“使用了未赋值的局部变量'money'
public static int getPay(int c, int t){ int money;Console .WriteLine ("input the number of coat and trousers your want buy:\\n");if (c==t)if(c>=50)money =c*80;else money=c*90;else if(c>t)if (c>t)if(t>=50)money=t*80+(c-t)*60;else money=t*90+(c-t)*...

C#代码 错误 使用了未赋值的局部变量“a”“b”“d”“f”
因为局部变量a b d f的值你没有初始化,在下面的swith中只有其中一个会被赋值,剩下的值就不能确定。你把double a, b, f, d;改成double a=0, b=0, f=0, d=0;就好了。

c#中局部变量必须得赋值?
对,要使用必须得先赋值,和c\/c++不一样。后面是类的成员变量,和局部变量是不一样的。成员变量在类初始化时就会分配一个默认值。

C#为什么会说我使用了“未赋值的局部变量d”
原因是这样,d的赋值是在一个条件下赋值的,即使你能保证这个在d使用前肯定会赋值,但编译器他不会知道,在if,else的赋值编译器会当做未赋值 实际上这里d的确会出现未赋值的事,因为当if和else都不满足的时候既会出现这情况 这样的情况你可以做中措施,第一如楼上等,第二就是把 Console.WriteLine...

相似回答