我只是想要過的2048版本,我寫的,我意識到,我寫了四種不同的方法,用於移動和合並上,左,下,右一個參數化方法。創建可循環兩個方向
合併左/右和上/下是相似的,但一個循環0-3和其他循環3-0。現在我能想到的只有一個參數是這樣的:通過在起始索引(3或0),增量(1或-1),結束索引(0或3)。這似乎是一個壞主意。有沒有更好的辦法?
我只是想要過的2048版本,我寫的,我意識到,我寫了四種不同的方法,用於移動和合並上,左,下,右一個參數化方法。創建可循環兩個方向
合併左/右和上/下是相似的,但一個循環0-3和其他循環3-0。現在我能想到的只有一個參數是這樣的:通過在起始索引(3或0),增量(1或-1),結束索引(0或3)。這似乎是一個壞主意。有沒有更好的辦法?
您可以重複使用相同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,3isLeft
是false
n-i
將採取以下值順序如下:3,2,1,0已被批准,因爲它非常清晰 – Ikaros
由於編程語言就不提了,我寫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);
對不起,我怎麼能更好的解釋?對我而言,似乎融合和移動的細節無關緊要。 – arrey