我在踢自己不得不問這個問題......我可以用一些簡單的'if'語句解決這個問題,但我確定在那裏是一個更簡單的方法!確定一個數字是一個大於還是小於另一個圓形集合
我有一個分頁控件,它允許用戶向左或向右移動一頁。每個頁面都有一個索引。該頁面週期,因此,如果您有三個頁面,你繼續向右移動用戶看到:
0 => 1 => 2 => 0 => 1 ...
我有當前頁面的索引和前一頁面的索引。我如何確定用戶是否已右轉或左轉?
謝謝!
我在踢自己不得不問這個問題......我可以用一些簡單的'if'語句解決這個問題,但我確定在那裏是一個更簡單的方法!確定一個數字是一個大於還是小於另一個圓形集合
我有一個分頁控件,它允許用戶向左或向右移動一頁。每個頁面都有一個索引。該頁面週期,因此,如果您有三個頁面,你繼續向右移動用戶看到:
0 => 1 => 2 => 0 => 1 ...
我有當前頁面的索引和前一頁面的索引。我如何確定用戶是否已右轉或左轉?
謝謝!
沒有足夠的信息來回答這個問題;並不總是能夠判斷用戶是否僅以當前和先前的指數移動「右」或「左」。
例如,我們假設current = 0
和previous = 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;
但是仍然沒有足夠的信息來告訴用戶在只有一兩頁時做了什麼:在這些情況下,左右移動會產生等效的「結果」。即使在這些情況下,如果您必須區分左右,顯而易見的解決方案是簡單地存儲用戶單獨分頁的方向。你可能不應該嘗試計算一些無法計算的東西。 :)
bool movedRight = current > previous;
不應付目前正在0和以前爲2. – bleeeah 2011-03-09 11:00:08
@bleeeah我沒有正確讀出這個問題**** sla額頭**** – 2011-03-09 12:43:19
dir = (current == (previous + 1) % num_pages ) ? right : left
一個if
應該足夠:
if(prev + 1 == current || (current == 0 && prev > 1))
// right
else
// left
如果頁面循環,第二組條件的用武之地。
誰投了我失望:請評論爲什麼。 – 2011-03-09 11:06:34
你做得非常好!我一直在向邏輯布爾運動moveRight = current ==(previous + 1)%numPages;但已經錯過了這個兩頁的問題。非常感謝! – ColinE 2011-03-09 11:12:31