2011-03-09 64 views
4

我在踢自己不得不問這個問題......我可以用一些簡單的'if'語句解決這個問題,但我確定在那裏是一個更簡單的方法!確定一個數字是一個大於還是小於另一個圓形集合

我有一個分頁控件,它允許用戶向左或向右移動一頁。每個頁面都有一個索引。該頁面週期,因此,如果您有三個頁面,你繼續向右移動用戶看到:

0 => 1 => 2 => 0 => 1 ... 

我有當前頁面的索引和前一頁面的索引。我如何確定用戶是否已右轉或左轉?

謝謝!

回答

3

沒有足夠的信息來回答這個問題;並不總是能夠判斷用戶是否僅以當前和先前的指數移動「右」或「左」。

例如,我們假設current = 0previous = 1

用戶是否向左移動或用戶是否向右移動,並且因爲只有兩個頁面而出現0溢出?這是不可能告訴的。

如果你不知道的頁數,這裏有一些粗略的解決方案:

// Doesn't handle wrap arounds properly. 
bool movedRight = current == previous + 1; 

// Assumes that being at the start point always means an overflow occurred.  
bool movedRight = (current == previous + 1) || current == 0; 

// Assumes that being at the start point always means an overflow occurred, 
// except when we were previously at the second element. 
bool movedRight = (current == previous + 1) || (current == 0 && previous != 1); 

如果你知道的頁數,它可能更直觀的事情:

// Can't disambiguate when numPages == 1 or 2 
bool movedRight = current == (previous + 1) % numPages; 

但是仍然沒有足夠的信息來告訴用戶在只有一兩頁時做了什麼:在這些情況下,左右移動會產生等效的「結果」。即使在這些情況下,如果您必須區分左右,顯而易見的解決方案是簡單地存儲用戶單獨分頁的方向。你可能不應該嘗試計算一些無法計算的東西。 :)

+0

你做得非常好!我一直在向邏輯布爾運動moveRight = current ==(previous + 1)%numPages;但已經錯過了這個兩頁的問題。非常感謝! – ColinE 2011-03-09 11:12:31

-1
bool movedRight = current > previous; 
+0

不應付目前正在0和以前爲2. – bleeeah 2011-03-09 11:00:08

+0

@bleeeah我沒有正確讀出這個問題**** sla額頭**** – 2011-03-09 12:43:19

0
dir = (current == (previous + 1) % num_pages ) ? right : left 
0

一個if應該足夠:

if(prev + 1 == current || (current == 0 && prev > 1)) 
    // right 
else 
    // left 

如果頁面循環,第二組條件的用武之地。

+0

誰投了我失望:請評論爲什麼。 – 2011-03-09 11:06:34

相關問題