创建一个循环两个方向的参数化方法

时间:2015-12-25 16:27:45

标签: loops

我只是在查看我写的2048版本,我意识到我写了四种不同的方法来移动和合并,左,下,右。

合并左/右和上/下相似,但一个循环0-3,另一个循环3-0。现在我只能想到一种参数化方法:传递起始索引(3或0),增量(1或-1)和结束索引(0或3)。这似乎是一个坏主意。还有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

您可以重复使用相同的for并在实际使用变量时管理条件。

void f(boolean isLeft) {
    int n = 3;
    for ( int i = 0 ; i <= n ; i++ ) {
        // add here the condition, without a change in for
        if ( isLeft ) {
            // use i
        } else {
            // use n-i
        }
    }
}

所以,它足以只传递一个参数而不是该函数的3个参数。

然后:

  • 如果你离开了=&gt; isLefttrue
    • i将按此顺序采用以下值:0,1,2,3
  • 如果你有正确的=&gt; isLeftfalse
    • n-i将按此顺序采用以下值:3,2,1,0

答案 1 :(得分:0)

由于未提及编程语言,我正在编写C函数。

void loop(int direction, int length)
{
    // Assuming direction > 0 is left
    int offset = direction > 0 ? 0 : (length - 1);
    int sign = direction > 0 ? 1 : -1;
    for (int i = 0; i < length; i++) {
        int index = sign * i + offset;
        //doSomethingOnIndex(index);
    }
}

这里length是迭代次数。左侧使用loop(1, 3);和正确使用loop(0, 3);