假设我有一个int[] gear = new int[] {5,4,3,2,1};
有 5 个值的数组,我还有一个变量,我用它来获取我想要的值int currentGear = 0;
现在我想使用以下代码在特定条件下单步执行数组:
if(rpm > shiftRPM && currentGear < gear.Length)
currentGear++;
Console.WriteLine( gear[cuurentGear] );
但是,使用该代码,我能够超过数组长度,因为齿轮。长度为 5,但数组的索引为零(即我可以拥有的最大数字是 4)。
所以我的解决方案是在 if 语句中将 1 添加到 currentGear,但这 for 循环按预期工作:
for(int i=0; i<gear.Length;i++;)
Console.Write(gear[i]);
和输出:5 4 3 2 1
没有错误。
另外,如果我Console.Write(gear.Length);
它会输出5
,所以很明显我的错误在于我的 if 语句允许我的索引通过齿轮。自 4 <5 和 5 以来的长度超出了范围。
有没有比这样做更好的方法来增加我的数组索引变量:
if(rpm > shiftRPM && (currentGear+1) < gear.Length)
currentGear++;
或者这是处理这种情况的最佳方法?
您的解决方案基本上是最好的方法。索引的最大值实际上是 Length-1,而不是 Length,所以当你只检查 currentGear 是否小于 Length 时,你并没有真正防止它变得太大。
为什么不将currentGear初始化为:
var currentGear = -1;