2015-12-25 50 views
1

我只是想要過的2048版本,我寫的,我意識到,我寫了四種不同的方法,用於移動和合並上,左,下,右一個參數化方法。創建可循環兩個方向

合併左/右和上/下是相似的,但一個循環0-3和其他循環3-0。現在我能想到的只有一個參數是這樣的:通過在起始索引(3或0),增量(1或-1),結束索引(0或3)。這似乎是一個壞主意。有沒有更好的辦法?

+0

對不起,我怎麼能更好的解釋?對我而言,似乎融合和移動的細節無關緊要。 – arrey

回答

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個參數給這個函數。

然後:

  • 如果你已離開=>isLefttrue
    • i將取以下值的順序:0,1,2,3
  • 如果你有權=>isLeftfalse
    • n-i將採取以下值順序如下:3,2,1,0
+0

已被批准,因爲它非常清晰 – Ikaros

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);