日期:2014-05-18  浏览次数:21001 次

设计了一个间接递归的方法,传不出参数来,请大家帮忙看看怎么回事?
问题描述,我定义了间接递归的方法,现在调用这个方法的时候想检查下是否有错误,但是明明报了错误,我却不能将错误变量传出来,问题也标在相应的代码处,请大家帮忙看看!

设计1:方法我作为void类型,通过一个传一个bool变量去接收错误,想实现有错误时,方法停止,返回bool变量的值:

bool errorjudge=false;//定义错误变量
int par;//带入的参数,不用管

//调用方法
adjustFollowBars(par,errorjudge);
adjustSameRowBars(par,errorjudge);

if(errorjudge)
{
//问题:errorjudge始终为false,这是为什么???
}



//方法定义
private void adjustFollowBars(int a[n],bool judge)
{

//调用
adjustFollowBars(a[n-1],judge);
adjustSameRowBars(a[n-1],judge);

}

//方法定义
private void adjustSameRowBars(int a[n],bool judge)
{

//if(错误判定逻辑)
{
judge=true;//调试时可以走到这里
messagebox.show("有错误");
return;//有错误我想终止该方法运行,是否可以实现?
}

adjustSameRowBars(a[n-1],judge);
adjustFollowBars(a[n-1],judge);


}

设计2:方法设计为不带bool参数的,将其自身设置为bool类型,如果有错误,方法返回bool值;

bool errorjudge=false;//定义错误变量
int par;//带入的参数,不用管

//调用方法
errorjudge=adjustFollowBars(par);//接收返回值,看是否有错误
adjustSameRowBars(par);

if(errorjudge)
{
//问题:errorjudge始终为false,这是为什么??????
}



//方法定义
private bool adjustFollowBars(int a[n])
{

//调用
adjustFollowBars(a[n-1]);
adjustSameRowBars(a[n-1]);
return false;//没有错误
}

//方法定义
private bool adjustSameRowBars(int a[n])
{

//if(错误判定逻辑)
{

messagebox.show("有错误");//调试时可以走到这里
return true;//有错误返回值设置为true,是否可以实现?
}

adjustSameRowBars(a[n-1]);
adjustFollowBars(a[n-1]);

return false;//没有错误
}

------解决方案--------------------
bool 是值类型,传递时会复制一份,改成传递地址
private void adjustFollowBars(int a[n],ref bool judge)
这数组写法不像 C# 的啊
------解决方案--------------------
探讨
引用:
bool 是值类型,传递时会复制一份,改成传递地址
private void adjustFollowBars(int a[n],ref bool judge)
这数组写法不像 C# 的啊


数组这个是写错了,我想表示这个递归的意思,我实际代码不是用的这个!不过你说的我还是没理解什么意思!
private void adjustFollowBars(int[……

------解决方案--------------------
设计一中bool是值类型数据,做参数传递在被调函数中是不会改变传入时的值的,需要采用ref修饰参数作为地址传递

设计二中adjustFollowBars返回值必定是false,errorjudge=adjustFollowBars(par),那么errorjudge为false有什么奇怪的
------解决方案--------------------
探讨

设计1:大家说的对,需要加ref,才能使形参的变化反映到实参里面去。谢谢!

设计2:我能运行到该段代码
//if(错误判定逻辑)
{
messagebox.show("有错误");//调试时可以走到这里
return true;//有错误返回值设置为true,是否可以实现?
}
应该就能返回true了吧?
为什么errorjudge没有接收到???
errorjudge=a……