2014-07-07 21 views
0

這是交易,我有這兩個功能,我覺得是非常低效的,我也確定有更高效的方法來做到這一點。所以「tile」變量是一個從0到24的整數,我需要根據該int得到x & y。 (瓦片變量類似於一個特定的按鈕,ID採用5x5格)電網轉換效率

第一個函數:

if (tile == 0 || tile == 5 || tile == 10 || tile == 15 || tile == 20) x = 0 else if (tile == 1 || tile == 6 || tile == 11 || tile == 16 || tile == 21) x = 1; else if (tile == 2 || tile == 7 || tile == 12 || tile == 17 || tile == 22) x = 2; else if (tile == 3 || tile == 8 || tile == 13 || tile == 18 || tile == 23) x = 3; else x = 4;

第二個功能:

if(tile < 5) y = 0; 
else if(tile < 10) y = 1; 
else if(tile < 15) y = 2; 
else if(tile < 20) y = 3; 
else y = 4; 

我想我可能已經找到了更儘管我不完全確定它是否更有效率,但它還是有效的第一種方法。

x = tile; 
while(x >= 5) 
    x -= 5; 

這樣做最有效的方法是什麼?

+1

你「覺得」他們效率低下 - 但你有*測量*他們效率低下? – awksp

+0

在這兩種情況下,您都可以通過使用數學來提高效率。提示:第一個模數,第二個整數除數。 – awksp

+0

我還沒有做過任何測量,但從我所聽到的情況來看,如果陳述不是最有效的功能。另外,它寫了很多文字。 –

回答

1

雖然在性能方面這可能是微不足道的,但在可讀性方面肯定有更好的方法來做到這一點。

x = (tile % 5); // modulus 
y = tile/5; // division 
+3

兩次操作都不需要減1,我很確定。 – awksp

+0

@ user3580294你是對的。在看了一會兒之後纔將它取出。 – Dima

+1

第一次看到'-1'。例如,'5%5 -1 == -1' –