我有一个奇怪的问题,我不能完全理解它。希望有人能对此有所了解。
我在一个递归函数中有一个for循环,即使循环计数器是该类的实例变量,它也总是被重置。为什么?代码如下:
public class Products{
private int loopCounter=1;
private int loop=10;
public int ProductCount {get;set;}
public int GetProducts(int Take, int Skip)
{
//code that sets ProductCount is removed
for (int loopCounter = 1; loopCounter < loop; loopCounter++)
{
//Depending on ProductCount, Take and Skip values are
//computed and passed to GetProducts. This code removed for brevity and am hard coding them
GetProducts(10,5);
//code to process GetProducts output removed
}
}
}
由于我不明白的原因,loopCounter总是被重置为1,循环永远继续下去。循环不应该在10次迭代后停止吗?
发布于 2018-09-27 06:41:42
每次调用函数时,都会在for循环的开头创建和设置一个新的方法级变量loopCounter
。如果要使用类级别变量,则应该删除for循环的第一部分(类似于for(; loopCounter < loop; loopCounter++)
也就是说,我不推荐使用循环来控制这样的递归。最好是只使用一个循环,或者在达到边界条件时让GetProducts返回。
public class Products{
private int loopCounter=1;
private int loop=10;
public int ProductCount {get;set;}
public int GetProducts(int Take, int Skip)
{
if(loopCounter >= loop) return;
loopCounter++;
//code that sets ProductCount is removed
//Depending on ProductCount, Take and Skip values are
//computed and passed to GetProducts. This code removed for brevity and am hard coding them
GetProducts(10,5);
//code to process GetProducts output removed
}
发布于 2018-09-27 06:45:03
我认为变量loopCounter
与全局变量不同,每次调用函数时都会创建一个新的变量,尝试从for循环中删除这个:int loopCounter = 1
。
发布于 2018-09-27 06:48:20
除了GetProducts()之外,我可能对循环中的实际内容感到有点困惑,但似乎您没有停止的条件。从1开始运行一次循环,然后再次调用该函数,并从1开始创建一个新的循环。您需要创建一个条件来停止这种无限调用机制,以便它将返回到已经存在的调用。
https://stackoverflow.com/questions/52526908
复制相似问题