2017-05-21 14 views
1

我需要一个函数将输入数字到int.Max并给我一个介于0和12之间的数字 - 所以1,2,3,4,5,6, 7,8,9,10,11是有效的数字。如何从一个递增的整数生成重复序列

我想过要用下面的方式来做,但我认为一定有更好的办法吗?

private static int GetNumberBetweenZeroAndTweleve(int inputNumber) 
{ 
    int result = 1; 
    for (int i = 1; i < inputNumber; i++) 
    { 
     // something elegant to calculate a number 
     result++; 
     if (result == 12) 
      result = 1; 
    } 

    return result; 
} 

示例输入=>输出:

1 => 1 
2 => 2 
3 => 3 
4 => 4 
5 => 5 
6 => 6 
7 => 7 
8 => 8 
9 => 9 
10 => 10 
11 => 11 
12 => 1 
13 => 2 
14 => 3 

+0

如果你需要一个在'0' - '12'之间的随机数,那么为什么你需要一个_input数字int.Max_? –

+0

'inputNumber'与预期输出有什么关系? –

+0

我不明白'GetNumberBetweenZeroAndTweleve'的目的是什么。 –

回答

3

你不希望任何环路(其可以是在大inputNumber情况昂贵int.MaxValue2147483647)但是

private static int GetNumberBetweenZeroAndTweleve(int inputNumber) { 
    return inputNumber <= 0 
    ? 1 
    : (inputNumber - 1) % 11 + 1; 
} 

测试:

var report = string.Join(Environment.NewLine, Enumerable 
    .Range(1, 14) 
    .Select(n => $"{n,2} => {GetNumberBetweenZeroAndTweleve(n),2}")); 

Console.Write(report); 

结果:

1 => 1 
2 => 2 
3 => 3 
4 => 4 
5 => 5 
6 => 6 
7 => 7 
8 => 8 
9 => 9 
10 => 10 
11 => 11 
12 => 1 
13 => 2 
14 => 3 
0

根据您的例子我已经编辑我的答案:

private static int GetNumberBetweenZeroAndTweleve(int inputNumber) 
{ 
    return inputNumber < 12 ? Math.Max(inputNumber, 1) : inputNumber % 12 + 1; 
} 

而且没有如果其他快捷方式:

private static int GetNumberBetweenZeroAndTweleve(int inputNumber) 
{ 
    if (inputNumber < 12) 
     return Math.Max(inputNumber, 1); 

    return inputNumber % 12 + 1; 
}