我只是在查看我写的2048版本,我意识到我写了四种不同的方法来移动和合并,左,下,右。
合并左/右和上/下相似,但一个循环0-3,另一个循环3-0。现在我只能想到一种参数化方法:传递起始索引(3或0),增量(1或-1)和结束索引(0或3)。这似乎是一个坏主意。还有更好的方法吗?
答案 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个参数。
然后:
isLeft
为true
i
将按此顺序采用以下值:0,1,2,3 isLeft
为false
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);