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

我写了两个函数判断关系的性质publicintBeself()//判断是否是自反,自反就返回OK()不是返回ERROR(){inti;for(i=0;i<step;i++... 我写了两个函数判断关系的性质
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#,好多不懂..拜托各位了
展开
 我来答
wjmayyezp09
2011-12-12 · TA获得超过587个赞
知道小有建树答主
回答量:420
采纳率:0%
帮助的人:253万
展开全部
如果单纯的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必然报出未赋值 而且编译都不能通过
百度网友9e3a6cf4b
2011-12-12 · 超过17用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:44.9万
展开全部
"使用了未赋值的局部变量“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;
我给你的这用大括号括起来了,你发现问题了不?这不会是你的本意吧?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luo_sd
2011-12-14
知道答主
回答量:36
采纳率:0%
帮助的人:20.8万
展开全部
这个问题,我告诉你一个道理你就知道了,int是值类型,所以值类型的变量是按值传递,你声明的时候都没赋值,但你在那循环潜逃体内对其赋值了,因为字是值类型,所以你在那循环体类赋值了,其实它就开启了一个新的内存空间,不知道你明白了不,当这循环体结束后,它的生命周期也结束了,所以你下面再使用到j的时候,它就说未赋初值了,如果你的j是引用类型的变量,你在循环体内改变了j那接下来再使用j就不会出现未赋值错误了!如果不明白的话,你再找我
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lqzcliff
2011-12-12 · TA获得超过368个赞
知道小有建树答主
回答量:460
采纳率:0%
帮助的人:239万
展开全部
给j一个初始值就行了.就这样: int j = 0;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
灰人王
2011-12-12 · TA获得超过2456个赞
知道大有可为答主
回答量:2401
采纳率:0%
帮助的人:928万
展开全部
估计是因为变量在循环中的作用域问题,你把
if (i == step + 1 && j == step + 1) 这句去掉,如果能通,说明我的猜测不错。
没有具体测试,只是猜测。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式