我有问题示例:
int A = 20; int B = 10, int C = 40, int D = 5;
如何使其循环编号从
A -> B -> C -> D ->
开始再从A开始循环?
我所知道的事情是这样的:
var arr1 = new[] { A, B, C, D };
Random rnd = new Random();
var Result = arr1[rnd.Next(arr1.Length)];
但是使用随机会使循环随机值有时会像
A -> A -> C -> A -> D
我想要的是像从
A -> B -> C -> D ->
那样逐步循环,然后再次从A开始。
我希望你能理解我的问题,因为我的英语很糟糕,抱歉,谢谢!
如果你想要 A、B、C、D、A...,你就不会有随机的东西
您只想确保在索引达到 3 时将其重置为 0(对于内部有 4 个项目的数组)
最简单的方法是使用模运算符
%
,它给出除法运算后剩下的余数:
for(int x = 0; x < 1000; x++){
var y = x % arr1.Length;
Console.WriteLine(arr1[y]);
}
您可以将 1000 设置为您实际想要循环的任意次数;在这种情况下,代码将在一个循环中打印 A、B、C、D 的值 250 次(1000 次循环打印四个项目之一意味着每个项目打印 250 次)
因为
%
是余数,它永远不会超过除数(被除的值)减一。在本例中,除数为 4,因此余数永远不会超过 3。这也是四项数组中可用的最大索引:
0%4 == 0
1%4 == 1
2%4 == 2
3%4 == 3
4%4 == 0 //we're back to the start
5%4 == 1
等等。记住任何正数,模
array.Length
都不会超出数组。这也意味着,因为它在 array.Length 之外工作,所以您不必担心数组中有多少项 - 可能是 10、一百万等,代码将自动调整以循环,无论数组有多大数组是
请小心负数,因为负数模的结果是负数(-10 % 4 是 -2)