Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 创建双向循环的参数化方法_Loops - Fatal编程技术网

Loops 创建双向循环的参数化方法

Loops 创建双向循环的参数化方法,loops,Loops,我只是浏览了一下我写的2048版本,我意识到我写了四种不同的方法来向上、向左、向下和向右移动和合并 合并左/右和上/下类似,但一个循环0-3,另一个循环3-0。现在我只能想到一种方法来参数化它:传递起始索引(3或0)、递增索引(1或-1)和结束索引(0或3)。这似乎是个坏主意。有更好的方法吗?您可以将相同的重新用于并在实际使用变量时管理条件 void f(boolean isLeft) { int n = 3; for ( int i = 0 ; i <= n ; i++

我只是浏览了一下我写的2048版本,我意识到我写了四种不同的方法来向上、向左、向下和向右移动和合并


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

您可以将相同的
重新用于
并在实际使用变量时管理条件

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
        }
    }
}
void f(布尔isLeft){
int n=3;

对于(inti=0;i,因为没有提到编程语言,所以我正在编写
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);
    }
}
void循环(整数方向,整数长度)
{
//假设方向>0为左
int偏移=方向>0?0:(长度-1);
int符号=方向>0?1:-1;
for(int i=0;i

这里的
length
是迭代次数。对于左用
循环(1,3);
和右用
循环(0,3);

对不起,我怎么能解释得更好呢?对我来说,合并和移动的细节似乎无关紧要。