2011-04-16 48 views
1

我需要能够在一定范围内生成一系列的升序或降序数字。Java:生成一个范围内的数字序列?

public int nextInRange(int last, int min, int max, int delta, boolean descending) { 
     delta *= descending ? -1 : 1; 

     int result = last + delta; 
     result %= max; 
     return Math.max(result, min); 
} 

这适用于升序值,但不是递减值。我一直在盯着这一段时间,我不知道如何使它为降序价值工作。有任何想法吗?

+2

创建一个循环,开始你的最小值,并在你的最大结束,反之为下行 – 2011-04-16 19:44:55

+0

我不完全确定该系列的属性应该是什么,但无论如何,“降序”参数似乎是多余的,因为调用者可以简单地为“delta”提供一个负值,这同样直观。另外,将两种方案混合限制在范围内(对顶部范围进行取模,对底部范围进行钳位)似乎也很奇怪。 – 2011-04-16 19:54:31

回答

1

这个怎么样,delta是否定的,当你想要一个降序?

public int nextInRange(int last, int min, int max, int delta) { 
    int result = last + delta; 

    // now clip to min and max 
    if (result > max) { 
     result = max; 
    } else if (result < min) { 
     result = min; 
    } 

    return result; 
} 

或直截了当也许更少,有函数体是单行:

return Math.min(max, Math.max(last + delta, min)); 
相关问题