确定圆形集中的数字是大于还是小于1的数字

时间:2011-03-09 10:52:17

标签: c#

我因为不得不问这个问题而踢我自己...我可以通过一些简单的'if'语句解决这个问题,但我确信有一种更简单的方法!

我有一个分页控件,允许用户向左移动一页或向右移动一页。每个页面都有一个索引。页面循环,因此如果您有三个页面并且您继续向右移动,则用户会看到:

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

我有当前页面索引和上一页索引。如何确定用户是向左还是向左分页?

谢谢!

4 个答案:

答案 0 :(得分: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;

仍然不足以告诉用户在只有一两页时所做的事情:在这些情况下,左右移动产生等效的“结果”。如果你必须在这些情况下左右区分,显而易见的解决方案是简单地存储用户单独分页的方向。您可能不应该尝试计算无法计算的东西。 :)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

一个if应该足够了:

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

如果页面循环播放,则第二组条件开始起作用。

答案 3 :(得分:-1)

bool movedRight = current > previous;