我应该如何正确地将我的数组索引值与数组长度进行比较

本文关键字:数组 比较 索引值 正确地 我的 我应该 | 更新日期: 2023-09-27 18:32:16

假设我有一个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;