如果单纯的for循环 不用特意去给j赋值 直接for(int j=0;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
break;
if (i == step + 1 && j == step + 1)
return 1;
else
return 0;
刚才没在意看,然后扫了一眼,发现你这还有问题
{ for (i = 0; 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) 这句去掉,如果能通,说明我的猜测不错。
没有具体测试,只是猜测。