代码之家  ›  专栏  ›  技术社区  ›  danijels

循环使用int值

  •  2
  • danijels  · 技术社区  · 14 年前

    我需要一些意见。

    假设您有一个基于int的枚举,其值为1到10。如果你有一个变量,比如说,对应于7的值,你怎么能最容易地将它设置为给定范围内的下一个值而不越界?如果该值达到限制,则应将其自身重置为范围内的第一个。

    我想要一个简单的解决方案。我不想做+,然后检查并重置值,另外它必须同时在C#和JavaScript中工作。我想数学对象中的某些东西可能有帮助,我不知道。。。

    2 回复  |  直到 14 年前
        1
  •  7
  •   Fred Foo    14 年前

    增量,减去1,然后是模,然后是加1(因为枚举是基于1的)。

    ((++i - 1) % N + 1
    

    (N=10,枚举可以接受的最大值。)

        2
  •  2
  •   Isak Savo    14 年前

    myEnum = (myEnum + 1) % maxValue;
    

    您可能需要键入:

    myEnum = (MyEnumType) (((int) myEnum + 1) % maxValue);
    

    编辑:

    // This statement may look weird, but it works :)
    myEnum = (myEnum % maxValue) + 1
    // Produces (for myEnum with maxValue set to 4, i.e. allows 1,2,3 & 4 as valid values):
    //  1 => 2
    //  2 => 3
    //  3 => 4
    //  4 => 1