有没有办法让一个函数在条件不满足时重复执行?

16 浏览
0 Comments

有没有办法让一个函数在条件不满足时重复执行?

我有类似这样的代码:

static int cantryagain=0;
private void myfunction(){
if (cantryagain==0)
{
    if(variableA=1)
        {
        //做一些事情
        //ta daaaa
        }
        else
        {
        //做一些神奇的事情,帮助variableA=1,但如果神奇的事情不起作用,我只希望它尝试一次。
        tryagain();
        }
    }
}
private void tryagain
{
    myfunction();
    cantryagain=1; //确保神奇的事情只发生一次,但很明显它永远无法达到这里,因为它会在之前再次执行myfunction...
}

我知道这段代码非常糟糕。我对C#还比较新。

我应该如何正确实现类似的功能?

0
0 Comments

问题的出现原因:需要一个函数在条件不满足时重复执行自身。

解决方法:使用循环来实现。

代码示例:

while (not somethingMet):
    # do something

需要注意的是,`somethingMet`是一个否定的变量名,这在通常情况下是不被推荐的。有关更好的命名变量的建议,可以参考makinggoodsoftware.com/2009/05/04/71-tips-for-naming-variablesstackoverflow.com/a/1228106/211627

0
0 Comments

问题的出现原因是希望在条件不满足时,函数能够重复执行。解决方法是使用循环结构来实现条件的判断和重复执行。下面是一种解决方案:

static int cantryagain=0;
private void myfunction()
{
    for (int i = 0; i < 2; i++) // 最多循环2次
    {
        if(variableA==1)
        {
            // 执行操作
            // ta daaaa
            break; // 退出循环,不再重复执行
        }
        else if (i == 0)  // 只在第一次迭代时尝试
        {
            // 尝试一些魔法操作以使 variableA=1,
            // 但如果魔法操作不成功,我只希望它尝试一次。
        }
    }
}

通过尝试之前的方法后,我自己找到了解决方案,但我的解决方案与这个答案最接近,并且运行良好。谢谢。

0
0 Comments

问题的出现的原因是希望在不使用循环的情况下,使函数能够在条件不满足时重复执行。解决方法是使用递归调用函数并添加可选参数。

下面是一个示例代码,其中函数 `myfunction` 使用了递归调用来重复执行自身,直到满足条件或递归次数达到上限:

private void myfunction(int recursiveCount = 0)
{
    if (recursiveCount > 1)
    {
      // 放弃执行
      return;
    }
    if (variableA == 1)
    {
      // 执行相关操作
      // ta daaaa
    }
    else
    {
      myFunction(++recursiveCount);
    }
}

要使用该函数,只需调用函数而不提供参数:

myfunction();

需要注意的是,递归是一个高级主题,可能需要在掌握基础知识之后再来学习和使用。

0