0

我有一个清单。如果您输入的值在该列表中 - 结果将被返回。即使值超出了结果的范围 - 由于 mod % 将返回结果。真的很难用语言来解释我的问题,所以让我们看一下代码

        List<int> list1 = new List<int>(){ 0, 1, 2, 3, 4, 5, 6 };
        int value = 3; // what's this number to us?
        string result = "";
        int starting_number = 3;

        if (value == list1[(list1.IndexOf(starting_number) + 2) % list1.Count()])
        { result = "yeah"; }
        else if (value == list1[(list1.IndexOf(starting_number) + 1) % list1.Count()])
        { result = "cool"; }
        else if (value == list1[(list1.IndexOf(starting_number) + 0) % list1.Count()])
        { result = "one"; }
        else if (value == list1[(list1.IndexOf(starting_number) - 1) % list1.Count()])
        { result = "noo"; }
        else {result = "oops cant find it"; }
  • 起始号码。这个数字是恒定的。所有的测量都与这个数字有关。
  • value - 我们输入的值。我们需要得到这个值的结果
  • 结果 - 只是一个字符串

这就是它的工作原理:

起始编号 = 3,值 = 2 => 结果 = “noo”(因为 2 = IndexOf(起始编号)- 1)

起始编号 = 6,值 = 0 => 结果 = “酷” (6 + 1 = 0)

起始编号 = 0,值 = 6 =>将发生错误。(0 - 1 = 6)

任何想法如何改进代码以消除此错误?基本上我可以抓取值是它们“在”starting_number 之后,但我不能在“starting_number 之前”抓取它们。

  • (6 + 1 = 0)的情况下:列表看起来像这样 6,0,1,2,3...

  • (0 - 1 = 6)的情况下:列表应该是这个 ...4,5,6,0

如果您有任何问题,请询问.. 用文字来解释问题真的很难,但我想例子可以更清楚地说明问题。

你如何获取低于starting_number的值?

4

2 回答 2

3

如果我理解正确,您希望将所有整数映射到 0 到 Count-1 的范围内,并且您当前的公式x % count仅在x > 0. 然后,如果您希望它适用于所有值,请x尝试这个(x % count + count) % count

于 2012-04-11T09:31:01.053 回答
1

尝试使用此代码

list1[Math.Sign((list1.IndexOf(starting_number) - 1))*(list1.IndexOf(starting_number) - 1) % list1.Count()]
于 2012-04-11T09:28:52.417 回答