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#,好多不懂..拜托各位了 展开
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#,好多不懂..拜托各位了 展开
7个回答
展开全部
如果单纯的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必然报出未赋值 而且编译都不能通过
但是 你的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必然报出未赋值 而且编译都不能通过
展开全部
"使用了未赋值的局部变量“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;
我给你的这用大括号括起来了,你发现问题了不?这不会是你的本意吧?
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;
我给你的这用大括号括起来了,你发现问题了不?这不会是你的本意吧?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题,我告诉你一个道理你就知道了,int是值类型,所以值类型的变量是按值传递,你声明的时候都没赋值,但你在那循环潜逃体内对其赋值了,因为字是值类型,所以你在那循环体类赋值了,其实它就开启了一个新的内存空间,不知道你明白了不,当这循环体结束后,它的生命周期也结束了,所以你下面再使用到j的时候,它就说未赋初值了,如果你的j是引用类型的变量,你在循环体内改变了j那接下来再使用j就不会出现未赋值错误了!如果不明白的话,你再找我
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
给j一个初始值就行了.就这样: int j = 0;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
估计是因为变量在循环中的作用域问题,你把
if (i == step + 1 && j == step + 1) 这句去掉,如果能通,说明我的猜测不错。
没有具体测试,只是猜测。
if (i == step + 1 && j == step + 1) 这句去掉,如果能通,说明我的猜测不错。
没有具体测试,只是猜测。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询