我需要一个函数,它将输入数字输入到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;
}
示例输入=&gt;输出:
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 :(得分:3)
你不想要任何循环(如果大inputNumber
,可能昂贵:int.MaxValue
是{{1但是
2147483647
测试:
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 :(得分:0)
我根据你的例子编辑了我的答案:
vk::Result createWin32SurfaceKHR(vk::Win32SurfaceCreateInfoKHR*, vk::AllocationCallbacks*, vk::SurfaceKHR*)
没有if-else快捷方式:
private static int GetNumberBetweenZeroAndTweleve(int inputNumber)
{
return inputNumber < 12 ? Math.Max(inputNumber, 1) : inputNumber % 12 + 1;
}